0

我正在尝试通过跨域从 ajax 调用中获取数据。这是代码

function GetMaxWULen() {
var x;
$.ajax({
    url : url,
    method : 'POST',
    jsonp : "callback",
    async : false,
    data : {
        Function : "GetMaxWULen",
        Authorization : Base64.encode(login + ":" + token),
        WuType : $("#ddlWUType").val()
    },
    dataType : 'jsonp',
    crossDomain : true,
    error : function(request, status, error) {
        alert('nie udało sie');
        alert(error);
    }
}).done(function(result) {
    console.log('done result');
    x = result;
    console.log(x);
});
console.log('function end');
console.log(x);}

在函数结束时,x 变量未定义,但在 done 事件中值是正确的。谁能帮助我或告诉我这段代码有什么问题?

4

2 回答 2

3

这是因为您的 AJAX 请求是异步完成的。这意味着您的其余代码不会等待您的响应准备好继续。

如果您需要在函数外部使用从 AJAX 返回的数据,您可能需要创建一个参数以在响应准备好时用作回调。例如:

function yourFunction(callback) {
    $.ajax({
        /* your options here */
    }).done(function(result) {
        /* do something with the result here */
        callback(result); // invokes the callback function passed as parameter
    });
}

然后调用它:

yourFunction(function(result) {
    console.log('Result: ', result);
});

小提琴:http: //jsfiddle.net/9duek/

于 2013-10-30T11:28:01.753 回答
-2

尝试

$.ajax({
    url : url,
    method : 'POST',
    jsonp : "callback",
    async : false,
    data : {
        Function : "GetMaxWULen",
        Authorization : Base64.encode(login + ":" + token),
        WuType : $("#ddlWUType").val()
    },
    dataType : 'jsonp',
    crossDomain : true,
    error : function(request, status, error) {
        alert('nie udało sie');
        alert(error);
    }
}).success(function(result) {
    var datareturned = result.d;
    console.log('done' +  datareturned);
    x = datareturned;
    console.log(x);
});
于 2013-10-30T11:24:28.360 回答