何时,然后JSON超时并中止

时间:2014-10-05 12:07:57

标签: jquery json

var data={};

var j1,j2,j3;

$.when(
    $.getJSON("site1.com?something",function(site1){
        data.site1=site1;
        }),
    $.getJSON("site2.com?something",function(site2){
        data.site2=site2;
        }),
    $.getJSON("site3.com?something",function(site3){
        data.site3=site3;
        })
).then(function(){

    console.dir(data);

    });

如何将json调用分配给变量j1,j2和j3,在这个排列中何时何地设置超时?

j1.abort();

这有时会有用,如果说site2没有响应,但是site1和site3做了......在上面的当前安排中,那么永远不会被解雇

1 个答案:

答案 0 :(得分:1)

  

如何将json调用分配给when

中的变量j1,j2和j3

您可以将每个$.getJSON的结果完全按照其编写方式分配给变量:

$.when(
    j1 = $.getJSON("site1.com?something", function(site1) {
        data.site1 = site1;
    }),
    j2 = $.getJSON("site2.com?something", function(site2) {
        data.site2 = site2;
    }),
    j3 = $.getJSON("site3.com?something", function(site3) {
        data.site3 = site3;
    })
).then(function(){
    console.dir(data);
});

  

我会在这种安排中将设置超时放在哪里?

如果您询问如何更改默认超时,可以使用$.ajaxSetuptimeout选项进行设置,该选项接受超时(以毫秒为单位)。您无需担心超时并在任何请求上调用.abort,这将自动发生。

$.ajaxSetup({
  timeout: 3000 // 3 seconds
});

最后,即使其中一个请求超时,您似乎也想要调用回调。这被认为是失败,因此不会调用成功回调。您需要将失败回调传递给then,作为第二个参数:

$.when(...)
.then(function () {
  console.log('success!');
}, function () {
  console.log('1 or more requests failed!')
});