Jquery 多次运行$.ajax()
我有一个jQuery$.ajax()函数,它在成功时返回base64值,即pdf页面。我必须返回多个base64值,因此我能想到的唯一方法是循环使用$.ajax()函数。每次成功返回时,我都将base64值写入一个image元素。这个很好用。问题是,因为它是异步的,所以它不一定按顺序返回页面。 我知道这不是最好的方法,但是如果我总是有一个不同的值,那就是页数,我怎么能链接它呢Jquery 多次运行$.ajax(),jquery,html,Jquery,Html,我有一个jQuery$.ajax()函数,它在成功时返回base64值,即pdf页面。我必须返回多个base64值,因此我能想到的唯一方法是循环使用$.ajax()函数。每次成功返回时,我都将base64值写入一个image元素。这个很好用。问题是,因为它是异步的,所以它不一定按顺序返回页面。 我知道这不是最好的方法,但是如果我总是有一个不同的值,那就是页数,我怎么能链接它呢 for (i = 1; i <= pdfPageCount; i++) { $.a
for (i = 1; i <= pdfPageCount; i++) {
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'Page.aspx/Method',
dataType: 'json',
error: function (err) {
alert('Error: ' + err);
},
success: function (resultStr) {
//alert('Page: ' + i);
var sigImage = document.createElement("img");
sigImage.setAttribute('src', 'data:image/png;base64,' +
resultStr.d);
document.getElementById("imgId").appendChild(sigImage);
},
});
} // end the for loop
for(i=1;i您需要从成功回调递归ajax调用,而不是使用迭代
(function recurse(i){
if(i > pdfPageCount)return;
$.ajax({
type: 'POST',
contentType: 'application/json',
url: 'Page.aspx/Method',
dataType: 'json',
error: function (err) {
alert('Error: ' + err);
},
success: function (resultStr) {
recurse(i+1);
var sigImage = document.createElement("img");
sigImage.setAttribute('src', 'data:image/png;base64,' +
resultStr.d);
document.getElementById("imgId").appendChild(sigImage);
}
});
})(1)
它们的关键在于使用。虽然您可以以同步方式链接调用,但我不建议这样做。更好的方法是异步调用每个页面,然后同时等待所有结果
var pages = [];
var deferredObjs = [];
for (i = 0; i <= pdfPageCount; i++) {
deferredObjs[i] = $.ajax({
type: 'POST',
contentType: 'application/json',
url: 'Page.aspx/Method',
dataType: 'json',
error: function (err) {
alert('Error: ' + err);
},
success: function (resultStr) {
pages[i] = resultStr;
},
});
} // end the for loop
$.when.apply( $, deferredObjs ).then( aFunctionToProcessPageResults() );
var页面=[];
var delferredobjs=[];
对于(i=0;i
async:true根据定义,Ajax是异步的。您可能有两种解决方案:回调地狱或承诺…这确实回答了问题,但出于性能原因,不希望一次向服务器发出一个请求。我最终使用了与此非常类似的方法。感谢您的帮助。
var pages = [];
var deferredObjs = [];
for (i = 0; i <= pdfPageCount; i++) {
deferredObjs[i] = $.ajax({
type: 'POST',
contentType: 'application/json',
url: 'Page.aspx/Method',
dataType: 'json',
error: function (err) {
alert('Error: ' + err);
},
success: function (resultStr) {
pages[i] = resultStr;
},
});
} // end the for loop
$.when.apply( $, deferredObjs ).then( aFunctionToProcessPageResults() );
$.ajax({
url:"url",
data:form,
dataType:'json',
async:true,
type:'post',
processData: false,
contentType: false,
success:function(data){}
});