我正在尝试使用 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/