如何从ajax调用获取数据?

时间:2013-10-30 11:22:42

标签: javascript jquery ajax

我试图通过跨域从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变量未定义,但在完成事件中值是正确的。 任何人都可以帮助我或告诉我这个代码有什么问题吗?

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:-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);
});