通过AJAX从BOX下载多个文件

时间:2014-05-26 05:52:56

标签: jquery ajax box-api box

我尝试使用their api通过AJAX从BOX服务器下载多个文件。所以我下载每个文件的脚本是这样的:

var args = {
  url: url,
  headers: headers,        
  crossDomain: true,        
  dataType: 'json',
  type: 'GET',
  error: function(data){
   //the server will return a redirect (it corresponds to error event)
   console.log(data);

   if (data.status == 200 && data.readyState == 4){                
       // so something with data.responseText           
   }   
   else{
       alert("The file is not downloadable.");
       return;                
   }
  }
};
$.ajax(args);

但是,如果我想下载2个文件,比如A和B,我想在调用AJAX下载后使用它们的内容进行进一步的计算。有时候我得到A(或/和B' s)内容为空的错误。由于ajax asynchronous,我四处搜寻并找出答案。然后我试图设置async: false,但然后BOX返回两个查询无效。

那我该怎样做才能让它发挥作用呢?

谢谢,

1 个答案:

答案 0 :(得分:2)

您需要做的是使用承诺,然后您可以使用.when()

但是因为这些特殊的AJAX调用没有触发成功回调,我你需要create your own - deferred objects然后你可以调用resolve()每个AJAX请求触发错误回调,但data.status为200.然后你可以使用.when()并将你的两个延期传递给它。

注意:您需要jQuery> = 1.5

好的,这是代码(fiddle);

var dfd1 = $.Deferred();
var dfd2 = $.Deferred();

$.when(dfd1.promise(), dfd2.promise()).done(function(){
    // both are done;
    alert('done!');
})

$.ajax({  
    url: "https://api.github.com",  
    type:'POST',  
    error: function(err){
        console.log(err);
        if(err.readyState === 4) {
            dfd1.resolve();
        }
    },
});  

$.ajax({  
    url: "https://api.github.com",  
    type:'POST',  
    error: function(err){
        if(err.readyState === 4) {
            dfd2.resolve();
        }
    },
});