这似乎是一个非常简单的问题,但我不知道为什么我会变得不明确。我正在使用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发生了什么?我怎样才能阻止它被定义/超出范围/发生什么?
提前致谢。
答案 0 :(得分:4)
因为alert
在get
完成之前执行了。在函数体中赋值后右键。 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);
}
});