声明全局变量

Efe*_*Efe 0 javascript ajax jquery

我知道这个问题已被问过百万次,所以我很抱歉.

我查看了所有其他示例,我不明白为什么以下代码现在不起作用.

当我将它放在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);
    }); 
Run Code Online (Sandbox Code Playgroud)

fca*_*ran 7

MapData未定义,因为在alertajax调用仍在运行时执行(ajax是异步的)并且响应尚不可用.所以以这种方式改变你的代码

 success: function (data) {
         MapData = data;
         alert(MapData);
 },
Run Code Online (Sandbox Code Playgroud)

或继续调用另一个函数的代码执行

 success: function (data) {
         continueExecution(data)
 },
 ...

 function continueExecution(data) {
     alert(data)
 }
Run Code Online (Sandbox Code Playgroud)

或使用延迟对象(在jQuery 1.5+上)

$.ajax({
   type: "GET",
   url: "content/home/index.cs.asp?Process=ViewCheckinMap"
})
.done(function(data) { alert(data) })
Run Code Online (Sandbox Code Playgroud)