我知道这个问题已经被问了几百次,所以我很抱歉。
我查看了所有其他示例,我不明白为什么以下代码现在无效。
当我将它放在CheckinMap函数之外时,我得到了未定义的警告框。
为什么?
$(document).ready(function() {
var MapData;
$(function CheckinMap() {
$.ajax({
type: "GET",
url: "content/home/index.cs.asp?Process=ViewCheckinMap",
success: function (data) {
MapData = data;
},
error: function (data) {
$("#checkinmap").append(data);
}
});
});
alert(MapData);
});
答案 0 :(得分:7)
MapData
未定义,因为在{ajax调用仍在运行时执行alert
(ajax是异步的)并且响应尚不可用。所以以这种方式改变你的代码
success: function (data) {
MapData = data;
alert(MapData);
},
或继续执行代码执行调用另一个函数
success: function (data) {
continueExecution(data)
},
...
function continueExecution(data) {
alert(data)
}
或使用延迟对象(在jQuery 1.5 +上)
$.ajax({
type: "GET",
url: "content/home/index.cs.asp?Process=ViewCheckinMap"
})
.done(function(data) { alert(data) })
答案 1 :(得分:0)
执行顺序是异步的。目前执行以下步骤:
您可以在成功函数中提醒(如建议的那样),但是您不知道该变量是该函数的本地变量还是实际上是全局的。要测试MapData是否实际上是全局的,您可以使用setTimeout来警告变量。
查看此修改后的示例代码:
// Global variable
var MapData;
// Global function
function test() {
alert(MapData);
}
$(document).ready(function() {
$.ajax({
type: "GET",
url: "http://www.google.nl",
success: function (data) {
MapData = data;
// Call global function with timeout
setTimeout(test, 10);
},
error: function (data) {
$("#checkinmap").append(data);
// Set error message instead of data (for testing)
MapData = 'error';
// Call global function with timeout
setTimeout(test, 10);
}
});
});
或者你可以在这里测试一下:http://jsfiddle.net/x9rXU/