我想执行一个ajax调用,并在运行之后阻止代码,直到ajax调用完成。
说我有这段代码
.on('pageloadfailed', function(event){
//if I move event.preventDefault to here the popup doesn't show. But I only want
//to prevent the default bahaviour if the condition in the ajaxe response if met.
$.when(ajax1()).done(function(response){
if(resposne.success == true){
event.preventDefault();
}
});
function ajax1() {
return $.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
...
});
}
alert("test");
}
警告将始终触发,如果“when”方法中的代码未返回false,我只希望触发警报。
感谢回复人员,我会进一步讨论这个问题。
我正在使用jquery mobile。当页面加载失败时,jqm会显示一个告诉用户刷新的弹出窗口。但是在某些情况下我不希望这种情况发生,我实际上想要自己处理错误。
因此,当触发pageloadfailed事件时,我不会通过ajax检查某些内容。在某些情况下,我会处理会发生什么,但在其他我想继续下去。
警报实际上并不在我的代码中,我只是试图用它来说明这一点。
答案 0 :(得分:2)
将归因async
放入false
:
async(默认值:true)
类型:布尔值
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假的。
答案 1 :(得分:2)
使用success
和error
回调:
$.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
success: function() {
doSomethingOnSuccess();
},
error: function() {
doSomethingOnError();
}
})
答案 2 :(得分:0)
如果看起来你几乎就在那里:
function ajax1() {
return $.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
...
});
}
$.when(ajax1()).done(function(){
alert("this should run when your AJAX call is completed. Put your code here");
});
答案 3 :(得分:-1)
我会使用$ .when()函数。
$.when(ajaxFunction()).done(function(response){
if(response.text != "false"){
alert("test");
}
})
function ajaxFunction() {
return $.ajax({
url: "someUrl",
dataType: "json",
data: dataInJson,
});
}
在上面的代码中我使用了response.text,但这是一个猜测 - 我不记得响应结构究竟是什么样的,你自己检查一下。我所知道的是它由3个参数组成,响应的文本就是其中之一。