使用$ .get后,变量最终未定义

时间:2012-02-10 09:25:45

标签: javascript jquery

这似乎是一个非常简单的问题,但我不知道为什么我会变得不明确。我正在使用jQuery从PHP脚本中获取数据 - 特别是PHP文件回应的字符串。这是代码:

<script type="text/javascript">

    var map1;

    $.get("script.php", function(data)
    {
        map1 = data;
    });

    alert(map1);

</script>

现在,如果我发出警报(map1),它最终会被取消定义......为什么会这样呢?我想通过在$ .get之外声明map1,它会解决问题但事实并非如此。如果我在$ .get函数内警告(map1),它会很好并且变量包含一个字符串(而不是未定义)。所以问题是...... map1发生了什么?我怎样才能阻止它被定义/超出范围/发生什么?

提前致谢。

5 个答案:

答案 0 :(得分:4)

因为alertget完成之前执行了。在函数体中赋值后右键。 get发起请求并返回。

答案 1 :(得分:3)

正如@Michael所说,.get调用是异步的,因此你的javascript正在执行此调用,然后继续使用你的脚本,这就是你得到undefined警告框的原因。

您最好的选择是进行success来电:

$.get("script.php", function(data) 
{ 
    map1 = data; 
})
.success(function() { alert(map1); });

答案 2 :(得分:2)

$.get以异步方式运行,这就是函数的第二个参数是匿名函数的原因。 $.get完成执行后,将调用此匿名函数。立即调用alert(map1),而不是异步调用。您可以将alert调用添加到传递给$.get的匿名函数:

$.get("script.php", function(data){
  map1 = data;
  alert(map1);
});

答案 3 :(得分:1)

因为$.get填充数据的速度比警报执行速度慢! 这意味着您的$.get函数的计算时间比您的警报要长! 您可以使用setTimeout()解决此问题,但我认为这是一种不好的做法。

答案 4 :(得分:1)

这样做怎么办?

var map1;

$.ajax({ 
          type: "GET",
          url: "script.php",   
          async: true,
          success : function(data)
          {
               map1 = data;
               alert (data);
          }
});