How do I make jQuery wait for an Ajax call to finish before it returns?
I have a server side function that requires login. If the user is logged in the function will return 1 on success. If not, the function will return the login-page.
I want to call the function using Ajax and jQuery. What I do is submit the request with an ordinary link, with a click-function applied on it. If the user is not logged in or the function fails, I want the Ajax-call to return true, so that the href triggers.
However, when I use the following code, the function exits before the Ajax call is done.
How can I redirect the user gracefully to the loginpage?
$(".my_link").click(
function(){
$.ajax({
url: $(this).attr('href'),
type: 'GET',
cache: false,
timeout: 30000,
error: function(){
return true;
},
success: function(msg){
if (parseFloat(msg)){
return false;
} else {
return true;
}
}
});
});
If you don't want the $.ajax()
function to return immediately, set the async
option to false
:
$(".my_link").click(
function(){
$.ajax({
url: $(this).attr('href'),
type: 'GET',
async: false,
cache: false,
timeout: 30000,
error: function(){
return true;
},
success: function(msg){
if (parseFloat(msg)){
return false;
} else {
return true;
}
}
});
});
But, I would note that this would be counter to the point of AJAX. Also, you should be handling the response in the error
and success
functions. Those functions will only be called when the response is received from the server.
我没有使用$.ajax
而是$.post
和$.get
函数,所以如果我需要等待响应,我使用这个:
$.ajaxSetup({async: false});
$.get("...");
The underlying XMLHttpRequest object (used by jQuery to make the request) supports the asynchronous property. Set it to false . Like
async: false
链接地址: http://www.djcxy.com/p/12480.html