jquery - 通过 AJAX 从 BOX 下载多个文件

标签 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)内容为空的错误。我搜索了一下,发现这是因为 ajax asynchronous 。然后我尝试设置async: false,但随后 BOX 返回两个查询均无效。

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

谢谢

最佳答案

你需要做的是使用promise,然后你可以使用.when() .

但是,由于这些特定的 AJAX 调用不会触发成功回调,我认为您需要 create your own -deferred objects然后您可以对每个 AJAX 请求调用 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();
        }
    },
});  

关于jquery - 通过 AJAX 从 BOX 下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863542/

相关文章:

链接上的 jQuery 动画

jquery - 我的 jQuery .live() 事件不会 .die()

jquery - 将鼠标悬停在链接上时并不总是执行 Ajax 调用

javascript - 使用 eval 解析 JSON 字符串

iphone - 如何使用 V2 Box iOS SDK 获取创建者和上次修改日期

Javascript insertAdjacentHTML 不工作

javascript - 通过 JavaScript 事件同步两个 CSS 属性

javascript - Phonegap Ajax 请求端口 8000

ios - 如何在webview中打开BOX云上的文件?

box-api - Box API v2.0 SDK for PHP