javascript - $.post 后的警报显示不同的数据

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

最佳答案

因为代码并不像您期望的那样同步运行。 $.post 调用“在后台”异步执行。一旦您调用 $.post,网络浏览器将生成一个新线程来完成所有任务,当前线程立即继续执行该函数的剩余部分,即 alert( ) 显示 2。新的后台线程依次连接网络服务器,触发 HTTP POST,最后调用回调函数。它比初始线程调用 alert() 需要花费更多的时间。这就是为什么你看到了差异。

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

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

alert('At end of function: ' + $("#finalvalue").val());

总而言之,如果您想根据新数据做一些事情,那么代码应该放在回调函数中。

关于javascript - $.post 后的警报显示不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3696897/

相关文章:

javascript - Bootstrap 完成一个函数后,如何在 jQuery 中运行一个函数?

jquery - 在 jQuery 中使用 keyup 来计算字符数

javascript - 这段 jQuery 代码在纯 JS 中的等效项

javascript - 有人可以解释 Ajax 和休息之间的区别吗?

jquery - 在 jQuery .load 上设置超时

javascript - 复杂的视差效果元素定位

javascript - 这种多重悬停效果是否可以仅使用 CSS?

javascript - Screeps:计算 body 的构建成本

javascript - 基于 DOM 的跨站点脚本

javascript - 使用 Ajax 时如何保持浏览器历史同步?