阻止代码运行直到ajax完成

时间:2013-05-27 13:11:58

标签: jquery ajax

我想执行一个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 个答案:

答案 0 :(得分:2)

将归因async放入false

来自jQuery ajax

  

async(默认值:true)

     

类型:布尔值

     

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

答案 1 :(得分:2)

使用successerror回调:

  $.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个参数组成,响应的文本就是其中之一。