-2

编码:

 $.post('script.php',{value:value},function(data)
 {
        var Aquaman= ???;
 });

现在我的问题是,如果我想将数据值设置到 Aquaman 变量中,我该怎么做?

4

3 回答 3

5

欢迎来到异步逻辑的奇妙世界。

您需要做的就是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内部回调。

于 2012-10-17T14:04:54.657 回答
1

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.)
于 2012-10-17T14:06:03.057 回答
0

为了让一个如此基本的问题变得简单,请在全局范围内声明您的 Aquaman 变量:

var Aquaman;

function something()
{
     $.post('script.php',{value:value},function(data)
     {
         Aquaman= data;
     });
}

您可以找到更好的方法来执行此操作,请参见此处

于 2012-10-17T14:05:39.677 回答