$ .post后显示不同的数据

时间:2010-09-12 22:18:29

标签: javascript jquery ajax

看一下这段代码:

<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?

1 个答案:

答案 0 :(得分:3)

因为代码没有按照您对编码的期望同步运行。 $.post调用“在后台”异步执行。一旦你调用$.post,webbrowser就会产生一个新线程来完成所有任务,当前线程会立即继续使用该函数的残余,即显示{{1}的alert() }}。新的后台线程依次连接Web服务器,触发HTTP POST,最后调用回调函数。它需要比初始线程需要更多时间来调用2。这就是你看到差异的原因。

在这个特定的代码示例中,您应该注意到alert()2之前被警告。尝试在警报中添加更明智的信息,例如

3

alert('Inside $.post callback: ' + $("#finalvalue").val());

总而言之,如果你想根据新数据做一些事情,那么代码应该进入回调函数。