Jquery On Click Function that Stops an Ajax Requests currently running [duplicate] - javascript

This question already has answers here:
Closed 11 years ago.
Possible Duplicate:
Stop all active ajax requests in jQuery
I want to have a button that will abort any ajax requests currently being run. Below is a selector that grabs the right button. What should go in the place of the alert('test')?
$('#abort').click(function(){
alert('test')
});

You need to call abort() method - on each of the ajax calls !
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){..........}
});
After that you can abort the request:
request.abort();

Create an array for each xhr object:
var xhrArray = new Array();
For every xhr object you need to add it to an array (where xhr is the object):
xhrArray.push(xhr);
Then on abort:
for( i = 0; i < xhrArray.length; i++){
xhrArray[i].abort();
stop = true;
}
The stop variable is for a loop that is elsewhere in my code to prevent more xhr objects from being created/sent.

Related

How to debug javascript returned from server after ajax call in Chrome debugger [duplicate]

This question already has answers here:
How do I debug Javascript which was loaded via AJAX (specifically jQuery)
(4 answers)
Closed 7 years ago.
I have an ajax call that returns a html view like so:
$.ajax({
url: 'process.php',
type: 'post',
data: {
action: "data",
view:"data",
},
success: function (data) {
$("#someDiv").html(data);
}
});
The view contains some javascript like so:
<script type="text/javascript">
$(document).ready(function () {
var x = $("#something").val();
});
</script>
Now, is there a way to set a breakpoint on the line var x = $("#something").val(); in Chrome's debugger? If not, is there any other way to debug this kind of code? at the moment im only using alert()'s.
Thanks in advance
use debugger
debugger; //this will stop and pause your project
var x = $("#something").val();

jQuery .ajax or .post taking too long message [duplicate]

This question already has an answer here:
Run function if jQuery.ajax waiting for respond long enough
(1 answer)
Closed 8 years ago.
I know about the timeout setting for the ajax call. But what i'm wondering is, is there a way to display a message to the user if an ajax call is still processing but taking longer than x seconds.
E.g.
During an ajax call, if it takes longer than 10 secs tell the user, "call taking longer than expected"
I'd say your best bet is to use window.setTimeout for however long you want to wait for before showing your notification, and then add a window.clearTimeout line to your success callback in your $.ajax() call:
var loadingTimeout = window.setTimeout(function() {
// show your warning here
alert('Still loading :P');
}, 10000); // 10000ms = 10sec
$.ajax({
url: 'http://your/url/here',
dataType: 'json',
type: 'GET',
success: function(r) {
window.clearTimeout(loadingTimeout);
// your results logic here
}
})
Sure, just setTimeout() yourself another function that checks some global variable that gets set by the ajax completion callback. In that function, if the ajax call is still outstanding, show a message.

How to stop Ajax call in jquery [duplicate]

This question already has answers here:
Abort Ajax requests using jQuery
(18 answers)
Closed 8 years ago.
I would like to stop an ajax call in jquery, which is not working
var xhr = null;
xhr = $.ajax({
url : 'www.example.com?some-large-call',
success : function(responseText) {
// some DOM manipulation
}
});
$("#button").click(function() { xhr.abort() });
I referred the below link
http://www.stoimen.com/blog/2009/09/29/jquery-stop-an-ajax-call/
this probally has more XHR..
Please see this answer:
jquery abort() ajax request before sending another
From the link:
every time you do ajax request, add to array:
requests.push(
$.ajax({
type: 'post',
url: '/test.php',
data: search_data,
success: function(data) {
$('#catalog').html(data);
}
}));
Then, when you want to stop calls..
loop through array and abort all calls..
for(var i = 0; i < requests.length; i++)
requests[i].abort();
Thanks
xhr.abort() it will cause the client to stop listening for the event, but probably it may not stop the server from processing it.
Provided the code you've pasted is the code you're actually using it's no wonder it doesn't work.
As it states on the site it is just pseudo code to illustrate an example. There is no AJAX request there and nothing to stop (at least nothing large enough to be able to stop)

Changed variable value not available outside ajax request - jQuery [duplicate]

This question already has answers here:
How do I return the response from an asynchronous call?
(41 answers)
Closed 9 years ago.
I have multiple fields in a form with same name, and I pass these values into ajax as;
$('#mybutton').click(function(){
var flag = 0;
$('input[name="myfield"]').each(function(){
var current = $(this);
var item = $.trim(current.val());
if(item != ""){
$.ajax({
type: 'POST',
url: 'ajaxhandler.php',
data: 'myitem='+item,
cache: false,
success: function(result) {
if(result == "true"){
flag++;
}
alert("stage1 = "+flag);//returns flag (1,2,3 etc)
}
});
}
});
alert("stage2 = "+flag);//returns 0. But I need same value as on the flag above
});
The flag is set to count the number of valid items, and is collected for further use. But outside ajax block, its not available. How can I solve this?
Your flag variable is local variable which declared inside of click event handler. And it will not be visible to outside of event handler. So you should simply declare it outside of event handler. If you want to use it inside of click event itself you can make your ajax query async:false or create function and call it after ajax call done.
EDIT:
As the Ajax request is asynchronous then the alert("stage2 = "+flag);
Is called right after your ajax call without waiting for the response. That is why flag=0

Javascript variable state after ajax request [duplicate]

This question already has answers here:
How do I return the response from an asynchronous call?
(41 answers)
Closed 9 years ago.
I'm new in the web programming and I don't fully understand some simple things.
Suppose we have following ajax request:
var records = [];
$.ajax(
{
url : "index",
dataType: 'json',
success: function (response)
{
records = response;
}
});
alert(records.length);//This displays 0
alert(records.length);//This alert correctly displays number of records
The problem is that the array records appears empty, if I try to use them immediately after calling ajax (first alert displays zero length, while second alert displays correct length). What's the problem and how to solve it?
You just need to put your alert inside the success callback.
var records = [];
$.ajax(
{
url : "index",
dataType: 'json',
success: function (response)
{
records = response;
alert(records.length); // will always be correct
}
});
In your example, the behavior will be unpredictable and will depend on how fast the call returns.
The A in Ajax stands for Asynchronous
The success function doesn't trigger until the HTTP response comes back.
When the first alert fires, it hasn't come back. In the time it takes for you to click OK to that alert, the response has arrived so the success function has run by the time the second alert fires. (alert is a blocking function).
Do your work on the data in the success function, not immediately after sending the HTTP request.

Categories

Resources