AJAX延迟下一行的执行

时间:2018-07-05 07:42:22

标签: javascript php ajax

给出以下代码,有人可以帮助我理解为什么在第二个警报之后执行第一个警报吗?我相信发生这种情况是因为ajax在获取数据之前有一个很小的延迟,如果我错了,请纠正我。在此先感谢。

  

JavaScript代码:

window.onload = function() {
arry = new Array();
jQuery.ajax({    
    type: "GET",
    url: "index.php?op=17&id=@@postID@@&action=fetch",   
    dataType: "text",
    success: function(response){    
        var e = response;
        console.log(JSON.parse(e));
        arry = JSON.parse(e)
        alert(e); //1st alert
    }
}); 
alert("test") //2nd alert
}

2 个答案:

答案 0 :(得分:5)

AJAX中的第一个“ A”代表异步。这意味着它不会阻塞您的代码,因此在您的AJAX请求之后立即调用alert('test'),而仅在AJAX请求收到服务器的成功响应后才调用alert(e)

您提到的“小延迟”并不是这样,而是服务器执行任何代码并返回响应所花费的时间。

如果您绝对需要同步处理请求,则可以将async属性传递给AJAX调用,如下所示:

window.onload = function() {
    var arry = [ ];

   jQuery.ajax({    
       type: "GET",
        url: "index.php?op=17&id=@@postID@@&action=fetch",   
        dataType: "json",
        async: false
    }).done(function(response) {
        arry = response
        alert(response); //1st alert
    });

    alert("test") //2nd alert
}

请注意,我已经对代码进行了一些更新以使用done()承诺。另外,指定dataType: "json"不需要在响应文本上调用JSON.parse()

答案 1 :(得分:0)

您的第一个数组位于AJAX调用的成功事件内部,只有在ajax调用的响应准备就绪时,该事件才被注册,跳过和回调。 >