1

我想执行一个 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 检查某些内容。在某些情况下,我会处理发生的事情,但在其他情况下,我只想继续。

我的代码中实际上并不存在警报,我只是想用它来说明这一点。

4

4 回答 4

2

只需将归因async放入false

来自 jQuery ajax

异步(默认值:true)

类型:布尔值

默认情况下,所有请求都是异步发送的(即默认设置为true)。如果您需要同步请求,请将此选项设置为 false。

于 2013-05-27T13:14:39.847 回答
2

使用successerror回调:

  $.ajax({
        url: "someUrl",
        dataType: "json",
        data:  yourJsonData,
        success: function() {
            doSomethingOnSuccess();
        },
        error: function() {
            doSomethingOnError();
        }
    })
于 2013-05-27T13:20:06.233 回答
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");
});
于 2013-05-27T13:20:15.730 回答
-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 个参数组成,响应的文本就是其中之一。

于 2013-05-27T13:14:32.897 回答