所以,我正在使用JQuery AjaxQueue来做事情,但我遇到的问题是我无法弄清楚如何在整个队列完成后继续它。我希望它通过表查看是否删除了东西,然后在完成后继续。现在发生的事情是队列中的东西将与周围的东西同时处理,因此在继续之前它不会执行ajax调用。
var outputString = "";
$('#errors').html("");
$("#deletingitems tbody tr").each(function() {
if(rowCounter == 1) {
htmltext.append(TopofHTMLPage());
}
var tableValA = $(this).find("td").eq(0).html();
var tableValB = $(this).find("td").eq(1).html().split("/")[0];
$.ajaxQueue({
type: "POST",
url: "@Url.Content("~/webservices/retrieve.asmx/Get")",
data: "{'index': '" + tableValA + "', 'identity': '" + tableValB + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//http://encosia.com/2009/06/29/never-worry-about-asp-net-ajaxs-d-again/
if (msg.hasOwnProperty("d")) {
// Leave the .d behind and pass the rest of
// the JSON object forward.
outputString = msg.d;
$('#errors').append(outputString);
if(obj.valA != null) {
htmltext.append('<tr>');
htmltext.append('<td>' + obj.valA + '</td>');
htmltext.append('<td>' + obj.valB + '</td>');
htmltext.append('<td>' + obj.valC + '</td>');
htmltext.append('<td>' + obj.valD + '</td>');
htmltext.append('<td>' + obj.valE + '</td>');
htmltext.append('</tr>');
}
}
}
, error: AjaxFailed
});
if(rowCounter == 10) {
htmltext.append(BottomofHTMLPage());
rowCounter = 1;
}
else {
rowCounter++;
}
});
// Add rows until 10 rows
while(rowCounter <= 10) {
htmltext.append('<tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>');
rowCounter++;
}
htmltext.append(BottomofHTMLPage());
htmltext.append('</body>');
htmltext.append('</html>');
var page = window.open('','NewHTMLPage','width=1500,height=600,scrollbars=yes');
page.document.open();
page.document.write(htmltext.toString());
page.document.close();
答案 0 :(得分:0)
我不熟悉Ajax Queue,但看起来你只需使用jQuery核就可以实现你所做的事情,只需使用回调:
var gotAttribute = function(attr)
{
$("#deletingitems tbody tr").each(function() {
if (this.value == 1) {
// Do stuff with attr?
}
}
};
// jQuery will pass the result onto gotAttribute once available
$.ajax({ success: gotAttribute });
答案 1 :(得分:0)
Ajax是异步的(应该是ajaxQueue,否则它不会是ajax)。这意味着当您发出请求时,您的代码会在ajax获取所请求的数据时继续。您的回调将在数据准备就绪时执行,这将在您的主线代码完成后执行(请查看Is JavaScript multithreaded?)。这就是为什么你的表行出现在关闭html标签之后。
要解决您的问题,您需要将结束代码拉入回调并检测上次请求何时完成。
jQuery(function ($) {
var i = 0;
$('tr').each(function () {
i++;
$.ajax({
url: 't.html',
success: function (data) {
console.log('serving: ' + i);
if(--i <= 0) {
console.log('which was the last');
}
}
});
});
});
同样适用于ajaxQueue。