我有一个执行jQuery ajax请求的函数。在此功能之后,网页将被重定向到另一个网址,但有时网页会在执行ajax请求之前重定向。
executeAjax();
doRedirect();
答案 0 :(得分:1)
Ajax的好处是可以毫不拖延地执行下一个命令。
因此,您应该将重定向添加到"完成"或者"总是" ajax的功能。
url = "https://www.google.com.vn/";
$.ajax({
url: url,
type: 'GET',
})
.done(function($response) {
console.log("success");
doRedirect();
})
.always(function($response) {
console.log("always");
doRedirect();
})
;
function doRedirect(){
location.href = "https://www.google.co.jp/maps/@35.6550509,139.8022144,15z?hl=ja";
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
ajax的优点(在您的情况下,问题)是它是一个异步操作。这意味着ajax请求不会在ajax函数之后阻塞代码。换句话说,在您的情况下,doRedirect();
无需等待executeAjax();
即可完成。
解决此问题的最佳方法是使用ajax方法的success
属性。 success
方法需要一个回调函数,并且只有在ajax方法成功完成后才会触发。
如果您的要求是重定向而不管ajax是成功还是失败,您可以使用ajax的complete
属性
当AJAX请求成功时重定向
$.ajax({
url: url,
type: 'GET',
dataType:'JSON',
success:function(data){
doRedirect();//redirects only when the ajax request is successfully completed
}
});
当AJAX请求成功或失败时重定向
$.ajax({
url: url,
type: 'GET',
dataType:'JSON',
complete:function(){
doRedirect();//redirects even the ajax requests failed
}
});