所以,我有以下代码: -
function testing(results) {
$table = $('#formList')
for (var event in results) {
var formIDX = results[event]["forms_idx"]
var formID = results[event]["form_id"]
var eventIDX = results[event]["events_idx"]
var eventID = results[event]["event_id"]
var objID = results[event]["object_id"]
var testVal = results[event]["value"]
alert($table.find("#" + formIDX).find('td:eq(1)').find("div").find("table").html())
$subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
var url ="http://localhost:3278/FARTFramework/testScenario/ajaxPopulateSubTables"
$.post(url, {
formID: formID, eventIDX:eventIDX, eventID:eventID, objID:objID, testVal:testVal
}, function(data) {
$subTable.append(data);
}).done(function(){});
}
}
它基本上需要一个JSON文件,然后通过附加等将数据添加到主表中的右子表中。
奇怪的是在调试期间我在那里有一个警报来检查它正在识别的表的html(确保它找到了正确的子表等)并且一切运行良好。但是,如果我删除该警报,那么突然只将所有数据附加到主表的最后一个子表中?!有线索吗?
答案 0 :(得分:2)
这是一个经典的JavaScript闭包循环问题。每次在循环中重新分配for
循环中定义的变量,并且来自AJAX请求(异步)的响应被附加到最后一个子表。当你有一个警报时它会起作用,因为在AJAX请求完成之前,变量还没有被重新分配(因为警报会阻止for循环执行)。
您可以通过让函数执行AJAX请求并追加来处理此问题。变量不会在此函数中重新分配,因此应该起作用。
function testing(results) {
$table = $('#formList')
function appendSubTable(formIDX, formID, eventIDX, eventID, objID, testVal){
alert($table.find("#" + formIDX).find('td:eq(1)').find("div").find("table").html())
var $subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
var url ="http://localhost:3278/FARTFramework/testScenario/ajaxPopulateSubTables"
$.post(url, {
formID: formID, eventIDX:eventIDX, eventID:eventID, objID:objID, testVal:testVal
}, function(data) {
$subTable.append(data);
}).done(function(){});
}
for (var event in results) {
var formIDX = results[event]["forms_idx"]
var formID = results[event]["form_id"]
var eventIDX = results[event]["events_idx"]
var eventID = results[event]["event_id"]
var objID = results[event]["object_id"]
var testVal = results[event]["value"]
appendSubTable(formIDX, formID, eventIDX, eventID, objID, testVal);
}
}
答案 1 :(得分:1)
如果没有看到更多代码,我无法肯定地说。但是当我遇到类似的问题时,因为我在$(document).ready(function(){ /*stuff here*/ })
基本上我附加的对象尚未加载。
答案 2 :(得分:0)
移动
$subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
给你的回调函数:
$.post(url, {
formID: formID, eventIDX:eventIDX, eventID:eventID, objID:objID, testVal:testVal
}, function(data) {
$subTable = $table.find("#" + formIDX).find('td:eq(1)').find("div").find("table")
$subTable.append(data);
}).done(function(){});
答案 3 :(得分:0)
使用其参数'async'; 它接受布尔值,在其中传递值'false'。
试试吧