Binding datatables ajax request to different button
I have a datatable that is configured as
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: $("#datatable").attr("data-search"),
dataType: "JSON",
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
}
},
});
table.ajax.reload();
Everything works fine, search, sort and all. But, I'm trying to make a different textbox as search which is present in modal. I am trying to send ajax request and rebuild the datatable with new data return from that particular ajax but it doesn't seem to rebuild with new data.
This is the code
$("body").on("click", ".advance-search", function () {
var type = $(this).attr("data-type");
var value = "";
var search = $(this).attr("data-search");
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
data: { "type": type, "value": value, "data": table.data().ajax.params() },
complete: function (data) {
console.log(data.responseJSON);
table.clear().rows.add(data.responseJSON.data).draw();
return false;
}
});
return false;
});
Notice that I have added return false
in two places because right after this ajax request another ajax request is sent which seems to be from this line table.clear().rows.add(data.responseJSON.data).draw();
via stacktrace.
Can anyone help?
jquery ajax datatable datatables datatables-1.10
add a comment |
I have a datatable that is configured as
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: $("#datatable").attr("data-search"),
dataType: "JSON",
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
}
},
});
table.ajax.reload();
Everything works fine, search, sort and all. But, I'm trying to make a different textbox as search which is present in modal. I am trying to send ajax request and rebuild the datatable with new data return from that particular ajax but it doesn't seem to rebuild with new data.
This is the code
$("body").on("click", ".advance-search", function () {
var type = $(this).attr("data-type");
var value = "";
var search = $(this).attr("data-search");
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
data: { "type": type, "value": value, "data": table.data().ajax.params() },
complete: function (data) {
console.log(data.responseJSON);
table.clear().rows.add(data.responseJSON.data).draw();
return false;
}
});
return false;
});
Notice that I have added return false
in two places because right after this ajax request another ajax request is sent which seems to be from this line table.clear().rows.add(data.responseJSON.data).draw();
via stacktrace.
Can anyone help?
jquery ajax datatable datatables datatables-1.10
add a comment |
I have a datatable that is configured as
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: $("#datatable").attr("data-search"),
dataType: "JSON",
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
}
},
});
table.ajax.reload();
Everything works fine, search, sort and all. But, I'm trying to make a different textbox as search which is present in modal. I am trying to send ajax request and rebuild the datatable with new data return from that particular ajax but it doesn't seem to rebuild with new data.
This is the code
$("body").on("click", ".advance-search", function () {
var type = $(this).attr("data-type");
var value = "";
var search = $(this).attr("data-search");
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
data: { "type": type, "value": value, "data": table.data().ajax.params() },
complete: function (data) {
console.log(data.responseJSON);
table.clear().rows.add(data.responseJSON.data).draw();
return false;
}
});
return false;
});
Notice that I have added return false
in two places because right after this ajax request another ajax request is sent which seems to be from this line table.clear().rows.add(data.responseJSON.data).draw();
via stacktrace.
Can anyone help?
jquery ajax datatable datatables datatables-1.10
I have a datatable that is configured as
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: $("#datatable").attr("data-search"),
dataType: "JSON",
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
}
},
});
table.ajax.reload();
Everything works fine, search, sort and all. But, I'm trying to make a different textbox as search which is present in modal. I am trying to send ajax request and rebuild the datatable with new data return from that particular ajax but it doesn't seem to rebuild with new data.
This is the code
$("body").on("click", ".advance-search", function () {
var type = $(this).attr("data-type");
var value = "";
var search = $(this).attr("data-search");
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
data: { "type": type, "value": value, "data": table.data().ajax.params() },
complete: function (data) {
console.log(data.responseJSON);
table.clear().rows.add(data.responseJSON.data).draw();
return false;
}
});
return false;
});
Notice that I have added return false
in two places because right after this ajax request another ajax request is sent which seems to be from this line table.clear().rows.add(data.responseJSON.data).draw();
via stacktrace.
Can anyone help?
jquery ajax datatable datatables datatables-1.10
jquery ajax datatable datatables datatables-1.10
edited Nov 28 '18 at 12:19
Prashant Pokhriyal
2,14541624
2,14541624
asked Nov 19 '18 at 9:46
Ali RasheedAli Rasheed
1,9322918
1,9322918
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I would like to suggest you make ajax option as a function. And inside that function check for the value of #tagSearchInput
or .input-advance-search
and append it along with the data
. Then make an ajax call using jquery ajax api and pass the new customized data.
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
// use ajax as a function
ajax: function (data, callback, settings) {
// get the 'data-type' and 'data-search' attribute
var type = $(".advance-search").attr("data-type"),
search = $(".advance-search").attr("data-search"),
value = "";
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
// append the 'type' and 'value' in 'data'
data.type = type;
data.value = value;
// make ajax call using jquery ajax api
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
// pass new customized data
data: data,
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
// call the callback function with the result
callback(data.responseJSON.data);
}
});
},
});
Now on the click event of .advance-search
you have to just reload the table using draw()
api.
$("body").on("click", ".advance-search", function () {
table.draw();
});
With this approach, your code will look cleaner and elegant.
Now in context to your worry about the ajax request is being sent after another ajax request because of the following code
table.clear().rows.add(data.responseJSON.data).draw();
That ajax call is happening because of the draw()
method. It is because when server-side processing enabled, a draw()
will always trigger a reload. Also clear()
won't empty the table since it is a client-side function. For more info check processing modes part of the manual.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371940%2fbinding-datatables-ajax-request-to-different-button%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I would like to suggest you make ajax option as a function. And inside that function check for the value of #tagSearchInput
or .input-advance-search
and append it along with the data
. Then make an ajax call using jquery ajax api and pass the new customized data.
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
// use ajax as a function
ajax: function (data, callback, settings) {
// get the 'data-type' and 'data-search' attribute
var type = $(".advance-search").attr("data-type"),
search = $(".advance-search").attr("data-search"),
value = "";
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
// append the 'type' and 'value' in 'data'
data.type = type;
data.value = value;
// make ajax call using jquery ajax api
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
// pass new customized data
data: data,
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
// call the callback function with the result
callback(data.responseJSON.data);
}
});
},
});
Now on the click event of .advance-search
you have to just reload the table using draw()
api.
$("body").on("click", ".advance-search", function () {
table.draw();
});
With this approach, your code will look cleaner and elegant.
Now in context to your worry about the ajax request is being sent after another ajax request because of the following code
table.clear().rows.add(data.responseJSON.data).draw();
That ajax call is happening because of the draw()
method. It is because when server-side processing enabled, a draw()
will always trigger a reload. Also clear()
won't empty the table since it is a client-side function. For more info check processing modes part of the manual.
add a comment |
I would like to suggest you make ajax option as a function. And inside that function check for the value of #tagSearchInput
or .input-advance-search
and append it along with the data
. Then make an ajax call using jquery ajax api and pass the new customized data.
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
// use ajax as a function
ajax: function (data, callback, settings) {
// get the 'data-type' and 'data-search' attribute
var type = $(".advance-search").attr("data-type"),
search = $(".advance-search").attr("data-search"),
value = "";
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
// append the 'type' and 'value' in 'data'
data.type = type;
data.value = value;
// make ajax call using jquery ajax api
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
// pass new customized data
data: data,
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
// call the callback function with the result
callback(data.responseJSON.data);
}
});
},
});
Now on the click event of .advance-search
you have to just reload the table using draw()
api.
$("body").on("click", ".advance-search", function () {
table.draw();
});
With this approach, your code will look cleaner and elegant.
Now in context to your worry about the ajax request is being sent after another ajax request because of the following code
table.clear().rows.add(data.responseJSON.data).draw();
That ajax call is happening because of the draw()
method. It is because when server-side processing enabled, a draw()
will always trigger a reload. Also clear()
won't empty the table since it is a client-side function. For more info check processing modes part of the manual.
add a comment |
I would like to suggest you make ajax option as a function. And inside that function check for the value of #tagSearchInput
or .input-advance-search
and append it along with the data
. Then make an ajax call using jquery ajax api and pass the new customized data.
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
// use ajax as a function
ajax: function (data, callback, settings) {
// get the 'data-type' and 'data-search' attribute
var type = $(".advance-search").attr("data-type"),
search = $(".advance-search").attr("data-search"),
value = "";
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
// append the 'type' and 'value' in 'data'
data.type = type;
data.value = value;
// make ajax call using jquery ajax api
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
// pass new customized data
data: data,
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
// call the callback function with the result
callback(data.responseJSON.data);
}
});
},
});
Now on the click event of .advance-search
you have to just reload the table using draw()
api.
$("body").on("click", ".advance-search", function () {
table.draw();
});
With this approach, your code will look cleaner and elegant.
Now in context to your worry about the ajax request is being sent after another ajax request because of the following code
table.clear().rows.add(data.responseJSON.data).draw();
That ajax call is happening because of the draw()
method. It is because when server-side processing enabled, a draw()
will always trigger a reload. Also clear()
won't empty the table since it is a client-side function. For more info check processing modes part of the manual.
I would like to suggest you make ajax option as a function. And inside that function check for the value of #tagSearchInput
or .input-advance-search
and append it along with the data
. Then make an ajax call using jquery ajax api and pass the new customized data.
var table = $(".datatable").DataTable({
processing: true,
serverSide: true,
// use ajax as a function
ajax: function (data, callback, settings) {
// get the 'data-type' and 'data-search' attribute
var type = $(".advance-search").attr("data-type"),
search = $(".advance-search").attr("data-search"),
value = "";
if (type == "tag") {
value = $("#tagSearchInput").val();
} else {
value = $(".input-advance-search").val();
}
// append the 'type' and 'value' in 'data'
data.type = type;
data.value = value;
// make ajax call using jquery ajax api
$.ajax({
url: search,
method: "GET",
dataType: "JSON",
// pass new customized data
data: data,
complete: function (data) {
$(".total-records").html(data.responseJSON.recordsTotal);
$("#maxPageText").html(`of ${table.page.info().pages} <i class="fa fa-chevron-right" style="font-weight:200;"></i>`);
// call the callback function with the result
callback(data.responseJSON.data);
}
});
},
});
Now on the click event of .advance-search
you have to just reload the table using draw()
api.
$("body").on("click", ".advance-search", function () {
table.draw();
});
With this approach, your code will look cleaner and elegant.
Now in context to your worry about the ajax request is being sent after another ajax request because of the following code
table.clear().rows.add(data.responseJSON.data).draw();
That ajax call is happening because of the draw()
method. It is because when server-side processing enabled, a draw()
will always trigger a reload. Also clear()
won't empty the table since it is a client-side function. For more info check processing modes part of the manual.
edited Dec 18 '18 at 5:16
answered Nov 28 '18 at 11:28
Prashant PokhriyalPrashant Pokhriyal
2,14541624
2,14541624
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371940%2fbinding-datatables-ajax-request-to-different-button%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown