使用ajax调用从函数返回值

时间:2012-02-25 16:45:34

标签: javascript jquery ajax

  

可能重复:
  Synchronous calls with jquery

我试图从包含ajax调用的函数返回一个值(请参阅下面的代码)。

returnValue变量在警报和返回时未定义。有人可以帮忙吗?

function getLightboxImages(){

    var returnValue;

    jQuery.ajax({
        url: "http://test.domain.com/WebService.svc/GetAllI",
        data: { id: "2", hash:"MaD01" },
        async: false,
        dataType: "jsonp",
        success: function (result) {
            returnValue = result
        }
    });

    alert(returnValue);

    return returnValue;
}

4 个答案:

答案 0 :(得分:2)

警报必须放在成功函数中,因为当ajax返回时会调用。您上面的内容将发送请求,然后在请求完成之前尝试提醒返回的值。

答案 1 :(得分:2)

尝试此代码,对于JSONP,您必须使用回调函数而不是成功方法。

    $.ajax({
        url: 'http://test.domain.com/WebService.svc/GetAllI',
        type: 'GET',
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",
        jsonp: "callback",
        jsonpCallback: "jsonpCallbackfunction",
        error: function () {
            alert("Error in Jsonp");
        }
    });

    function jsonpCallbackfunction(responseData) {
        alert(responseData);
    }

http://cmsnsoftware.blogspot.com/2012/02/how-to-use-cross-domain-ajax-request.html#0

答案 2 :(得分:1)

function getLightboxImages(){
    var returnValue;

    jQuery.ajax({
        url: "http://test.domain.com/WebService.svc/GetAllI",
        data: { id: "2", hash:"MaD01" },
        async: false,
        dataType: "jsonp",
        success: function (result) {
            returnValue = result
        }
    });

    alert(JSON.stringify(returnValue));

    return returnValue;
}

跨域请求只能是异步的,因为跨域请求依赖于动态脚本标记,该标记永远不能同步,必须使用数据类型json和GET方法。

对于相同的域请求,请尝试在警告之前对json对象进行字符串化,如上所述!

答案 3 :(得分:0)

您无法进行同步JSONP请求。

使用回调代替return:

function getLightboxImages(callback) {
  jQuery.ajax({
    url: "http://test.domain.com/WebService.svc/GetAllI",
    data: { id: "2", hash:"MaD01" },
    dataType: "jsonp",
    success: function (result) {
        callback(result);
    }
  });
}

用法:

getLightboxImages(function(result){
  alert(result);
});