Ajax同步请求

时间:2014-03-08 15:00:34

标签: jquery ajax synchronous

我经历了很多帖子。有人说在jquery 1.8之后,它被弃用了。对某些人来说,它仍然有效。我该如何实现这个

            $.ajaxSetup({async:false});
             duration_reco = $.ajax({
                   url : newurl, 
                   async : false,
                   dataType : 'json',

                });

            console.log(duration_reco.responseText);

它说durtaion_reco未定义。我已经看到duration_reco cotaines有效数据了。 ajax请求正在同步执行。

1 个答案:

答案 0 :(得分:1)

$.ajax支持许多不同类型的请求(jQuery调用 transports ),并将其隐藏在用户之外(普通XHR,带有CORS的XHR,JSONP) )。这很好,因为这意味着您可以在$.ajax()处触发任何网址,而不必担心幕后发生的事情。

但是,并非所有类型的请求都支持$.ajax()支持的所有选项。当发生这种情况时,事情开始失败,似乎是随机的。这就是这里发生的事情。

由于您要从其他域请求资源,$.ajax()正在发出JSONP请求。要了解JSONP的工作原理,请参阅Can anyone explain what JSONP is, in layman terms?

基本上,JSONP请求不能同步发生。您只能 异步执行它们,这涉及到将代码更改为;

duration_reco = $.ajax({
    url : newurl, 
    dataType : 'json'
}).done(function (obj) {
    console.log(obj);
});

无论如何,同步AJAX请求错误。他们锁定了浏览器。几乎没有理由使用它们。 不惜一切代价避免使用我不能强调这一点。

您还应确保newurl变量以http://https://开头;否则,它将被视为当前域中的路径,并且将要求http://www.yourdomain.com/gdata.youtube.com/feeds/api...