Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
Jquery 为什么post()在DOM返回后不更新它?观察到奇怪的计时问题_Jquery_Javascript Events_Postback - Fatal编程技术网

Jquery 为什么post()在DOM返回后不更新它?观察到奇怪的计时问题

Jquery 为什么post()在DOM返回后不更新它?观察到奇怪的计时问题,jquery,javascript-events,postback,Jquery,Javascript Events,Postback,下面的代码真的让我头疼,我想可能post()函数需要阻塞。我不熟悉jQuery(最新版本)和AJAX,但我使用的是ColdFusion,它在数据变量中返回一些HTML var dataResult; var statusResult; $.post('fh_result.cfm',$('#myform').serialize(),function(data,status){ dataResult = data; statusResult = status; }); //ale

下面的代码真的让我头疼,我想可能post()函数需要阻塞。我不熟悉jQuery(最新版本)和AJAX,但我使用的是ColdFusion,它在数据变量中返回一些HTML

var dataResult;
var statusResult;
$.post('fh_result.cfm',$('#myform').serialize(),function(data,status){
     dataResult = data;
     statusResult = status;
});
//alert(statusResult);
if ('success' == statusResult)
{
    alert(statusResult);
    $('#result').html(dataResult);
}
当我取消注释第一个警报时,它返回“undefined”,但随后进入if块,下一个警报框显示“success”。如果我注释掉那一行,它根本不会进入If语句。我的猜测是,我想做一个阻塞调用或其他什么,因为我想在文章之后插入页面上的数据。我在重新编写顶层代码时也遇到了一个问题,如下所示:

var dataResult;
var statusResult;
$.post('fh_result.cfm',$('#myform').serialize(),function(data,status){
     dataResult = data;
     statusResult = status;

     alert(statusResult);
     $('#result').html(dataResult);
});
//alert(statusResult);

现在,在本例中,当我注释掉第二个警报框时,警报显示“成功”。当我取消注释它时,我会收到一个提示,表示成功,另一个提示表示未定义,但这次它会根据需要使用回发的结果更新DOM。如果没有警报框,我怎么做呢?

它正常工作。您不能期望Ajax调用立即返回。调用post,在返回之前,javascript将继续运行其其余命令。post可能会在1毫秒、1秒或1分钟内返回。但post的回调函数中的代码将不会执行,直到post从服务器往返

您的
.post()
异步运行。当它开始运行时,javascript解释器继续运行
alert()
语句,该语句位于
post()
正文之外。由于
post()
是异步的,在调用
alert()
时,它几乎肯定不会完成,因此statusResult和dataResult变量可能未定义。只有在
post()
success回调中运行的代码才能保证按顺序运行

您还可以尝试使用成功回调直接提供的变量,而不是将其分配给最初在
.post()
块之外定义的另一个变量。因此:

 $('#result').html(data);
…而不是数据结果。
这可能是个麻烦事,但值得一试。

好吧,我知道这是一个异步调用,但如何将结果输入到DOM中呢?为什么在将结果插入DOM之前需要警报?我以为alert()是非侵入性的,但在这种情况下它是必要的。我想我应该指出,当警报('statusResult')被注释掉时,它从不将结果插入DOM。嗯,我明白了。因此,我在下面有一些其他代码,它们应该被移到成功处理程序中。这就是DOM插入失败的原因。谢谢你的帮助!