看一下这段代码:
<input type="hidden" id="finalvalue" value="2" />
<script>
$.post("/increment_in_one", { param: 2 }, function (data) {
alert( data ); // this shows: 3
$("#finalvalue").val( data );
alert( $("#finalvalue").val() ); // this shows 3
});
alert( $("#finalvalue").val() ); // this shows 2
</script>
为什么最后一次提醒显示2?
答案 0 :(得分:3)
因为代码没有按照您对编码的期望同步运行。 $.post
调用“在后台”异步执行。一旦你调用$.post
,webbrowser就会产生一个新线程来完成所有任务,当前线程会立即继续使用该函数的残余,即显示{{1}的alert()
}}。新的后台线程依次连接Web服务器,触发HTTP POST,最后调用回调函数。它需要比初始线程需要更多时间来调用2
。这就是你看到差异的原因。
在这个特定的代码示例中,您应该注意到alert()
在 2
之前被警告。尝试在警报中添加更明智的信息,例如
3
和
alert('Inside $.post callback: ' + $("#finalvalue").val());
总而言之,如果你想根据新数据做一些事情,那么代码应该进入回调函数。