将$ .post中的数据设置为var

时间:2012-10-17 13:59:22

标签: jquery ajax

代码:

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

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

3 个答案:

答案 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