删除Javascript警报行会停止我的附加代码正常工作
因此,我得到了以下代码:-删除Javascript警报行会停止我的附加代码正常工作,javascript,jquery,append,alert,Javascript,Jquery,Append,Alert,因此,我得到了以下代码:- 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
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(确保它找到了正确的子表等),所有这些都工作正常。但是,如果我删除该警报,它会突然将所有数据追加到主表中的最后一个子表中?!有什么线索吗?如果没有看到更多的代码,我不能肯定。但当我遇到类似问题时,这是因为我在
$(document.ready)(function(){/*stuff here*/})之外使用了append
基本上,我附加到的对象还没有加载。如果没有看到更多的代码,我不能确定。但当我遇到类似问题时,这是因为我在$(document.ready)(function(){/*stuff here*/})之外使用了append
基本上,我附加到的对象尚未加载。Move
$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(){});
移动
到您的回调函数:
$.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(){});
在Ajax调用中,使用其参数“async”;
它接受布尔值,并在其中传递值“false”
在Ajax调用中使用它的参数'async';
它接受布尔值,并在其中传递值“false”
试试看这是一个典型的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);
}
}
这是一个典型的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);
}
}
这就是异步工作的方式,循环继续并完成,然后使用ajax插入内容,警报只是暂停操作足够长的时间,以便ajax完成。换句话说,您的逻辑是有缺陷的,您必须等待ajax调用完成,然后再进行下一次迭代(请不要将其设置为async:false)!感谢@adeneo的解释,关于如何实现这一点有什么建议吗?我担心我的google fu已经抛弃了我,我对ajax还不熟悉(其实大部分都是这样!)这就是异步的工作原理,循环继续并完成,然后内容插入ajax,警报只是停止操作足够长的时间,ajax才能完成。换句话说,您的逻辑是有缺陷的,您必须等待ajax调用完成,然后再进行下一次迭代(请不要将其设置为async:false)!感谢@adeneo的解释,关于如何实现这一点有什么建议吗?我担心我的google fu已经抛弃了我,我对ajax还不熟悉(大部分是真的!)他肯定不希望它是同步的?他肯定不希望它是同步的?不幸的是,在这种情况下,我做的事情是正确的,至少从一开始,因为我的函数是从$(文档)中调用的。ready()谢谢你的建议在这种情况下我做得很好,至少从一开始,因为我的函数是从$(文档)中调用的。ready()谢谢你的建议,我刚刚意识到了原因。虽然这段代码阻止了$subtable
继续前进,但是formIDX
仍在变化。该死的vsr先到了那里!我才意识到为什么。虽然这段代码阻止了$subtable
继续前进,但是formIDX
仍在变化。该死的vsr先到了那里!看起来做得很好,干杯!奇怪的是,我第一次在三个表中的最后一个表上尝试它时,它交换了两个条目,因此,例如,如果对象5和6应该在最后一个表中,它将6放在5之前,但在第一次之后,它似乎工作得很好!我会留意的,但其他方面看起来不错!干杯!:)看起来做得很好,干杯!奇怪的是,我第一次在三个表中的最后一个表上尝试它时,它交换了两个条目,因此,例如,如果对象5和6应该在最后一个表中,它将6放在5之前,但在第一次之后,它似乎工作得很好!我会留意的,但其他方面看起来不错!干杯!:)