Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除Javascript警报行会停止我的附加代码正常工作_Javascript_Jquery_Append_Alert - Fatal编程技术网

删除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之前,但在第一次之后,它似乎工作得很好!我会留意的,但其他方面看起来不错!干杯!:)