我使用网格小部件来显示一堆数据。由于网格的工作方式,我需要在加载后对表中的每一行运行ajax查询。 (我试图想出一个更好的方法,但没有一个。)我在正确的时间运行查询,这不是问题,但我的页面返回了奇怪的结果。< / p>
我必须遍历表格的每一行以获取其他功能,因此我在for
循环内运行ajax调用,其他所有内容(同步)都在内部运行。 ajax调用都发送和接收正确的数据,但它没有应用于网格。我有三个可能的返回值:read
应用read-row
类,alert
应用alert-row
类,none
是一个虚拟返回值,除了表明成功。但是,如果行中的任何内容返回read
,则该类将应用于网格的最后一行,而不是最初在请求中引用的那一行。
我做错了什么?我如何重写这个以基于ajax响应正确应用给定的类?行信息,数据和ajax调用本身的声明都是正确的。正在通过呼叫发送正确的信息,并且正在接收正确的信息。
这是我目前的代码。我尝试将success
函数作为附加到ajax调用的done
块放入,但这会导致同样的问题。
// this is the correct initialization
var gridData = grid.dataSource.view();
for (var i = 0; i < gridData.length; i++) {
// these are also correct. I can step through with the debugger and
// currentRow is properly set
var currentUid = gridData[i].uid;
var currentRow = grid.table.find("tr[data-uid='" + currentUid + "']");
// the grid caches its row information when refreshed, so this is
// necessary to "reset" the row
$(currentRow).removeClass("read-row");
$(currentRow).removeClass("alert-row");
// other synchronous stuff, only manipulates individual cell data
$.ajax({
cache: false,
type: "GET",
url: "/correct/url",
data: { "pId": gridData[i].Id },
dataType: "text",
success: (function(res) {
if (res === "read") {
$(currentRow).addClass("read-row");
} else if (res === "alert") {
$(currentRow).addClass("alert-row");
}
}),
error: (function() {
alert("errormsg");
})
});
// more synchronous stuff, only manipulates individual cell data
}