代码:
$.post('script.php',{value:value},function(data)
{
var Aquaman= ???;
});
现在我的问题是,如果我想将数据值设置为Aquaman变量,我该怎么做?
答案 0 :(得分:5)
欢迎来到异步逻辑的精彩世界。
您需要做的只是var Aquaman = data;
- 但是,该变量只存在于匿名函数中。
你可以通过以通常的方式分配全局变量来解决这个问题:
var Aquaman;
$.post('script.php',{value:value},function(data) {
Aquaman= data;
});
但是,在您的AJAX调用完成之后,才会设置此全局变量。例如,如果其他AJAX调用或用户事件调用Aquaman
,则可能需要这样做。但是,以下代码将无法正常工作:
var Aquaman;
$.post('script.php',{value:value},function(data) {
Aquaman= data;
});
console.log(Aquaman); // displays nothing
...因为console.log()
在$.post()
完成之前立即运行。
阻止 的唯一方法是制作同步AJAX call:
$.ajax({url: 'script.php', data: {value:value}, async: false}, function(data) {...});
...但是这会通过强制脚本停止并等待回调完成来消除AJAX的大部分优点。几乎在所有情况下,最好让AJAX保持异步并处理回调中的data
。
答案 1 :(得分:1)
将data
的值分配给Aquaman
就像以下一样简单:
$.post('script.php',{value:value},function(data){
var Aquaman= data;
});
但是,由于variable scope,如果您需要$.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.)
答案 2 :(得分:0)
为了使一个基本问题变得简单,请在全局范围内声明您的Aquaman变量:
var Aquaman;
function something()
{
$.post('script.php',{value:value},function(data)
{
Aquaman= data;
});
}
您可以找到更好的方法,请参阅there。