编码:
$.post('script.php',{value:value},function(data)
{
var Aquaman= ???;
});
现在我的问题是,如果我想将数据值设置到 Aquaman 变量中,我该怎么做?
欢迎来到异步逻辑的奇妙世界。
您需要做的就是var Aquaman = data;
- 但是,该变量将仅存在于该匿名函数中。
您可以通过以通常的方式分配全局变量来解决此问题:
var Aquaman;
$.post('script.php',{value:value},function(data) {
Aquaman= data;
});
但是,在您的 AJAX 调用完成之前,不会设置此全局变量。例如,如果Aquaman
被其他 AJAX 调用或用户事件调用,这可能是可取的。但是,以下代码不会像您预期的那样工作:
var Aquaman;
$.post('script.php',{value:value},function(data) {
Aquaman= data;
});
console.log(Aquaman); // displays nothing
...因为在完成console.log()
之前立即运行$.post()
。
防止这种情况的唯一方法是进行同步AJAX 调用:
$.ajax({url: 'script.php', data: {value:value}, async: false}, function(data) {...});
...但这会通过强制您的脚本停止并等待回调完成来抵消 AJAX 的大部分优势。在几乎所有情况下,最好让您的 AJAX 保持异步并处理data
内部回调。
data
为to赋值Aquaman
很简单,如下所示:
$.post('script.php',{value:value},function(data){
var Aquaman= data;
});
但是,由于范围可变$.post
,如果您在回调之外需要此值,则需要Aquaman
在此函数之外定义。例如:
//Some Code
$.post(...,function(data){
var Aquaman = data;
});
// Aquaman is undefined out here.
然而:
var Aquaman;
$.post(...,function(data){
Aquaman = data;
});
// Aquaman exists (but be careful, AJAX calls make this value not accessible
// until the callback has been executed.)
为了让一个如此基本的问题变得简单,请在全局范围内声明您的 Aquaman 变量:
var Aquaman;
function something()
{
$.post('script.php',{value:value},function(data)
{
Aquaman= data;
});
}
您可以找到更好的方法来执行此操作,请参见此处。