jQuery跨域请求返回'undefined'

时间:2013-10-03 12:08:55

标签: javascript ajax jquery cross-domain

在阅读了stackoverflow的各种例子后,我写了这个函数:

function showGetResult(crossDomainUrl) {
    $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        crossDomain: true,
        success: function (data) {
            debug(data);
            return data;
        }
    });
}

并使用此

调用它
alert(showGetResult(crossDomainUrl));

但我得到的只是'undefined',这是在内容脚本中的网络浏览器扩展中使用的。

2 个答案:

答案 0 :(得分:0)

这是因为Ajax请求以异步方式运行。 return data没有做任何事情。您可以将其更改为(更新以反映评论中的请求以便能够下载脚本):

function showGetResult(crossDomainUrl) {
    return $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        dataType: 'script',
        crossDomain: true
     });
}

showGetResult('http://code.jquery.com/ui/1.10.3/jquery-ui.js')
    .done(function(data) {
        alert("success: " + data);
    })
    .fail(function(jqXHR, textStatus, ex) {
        alert("failed: " + textStatus);
    });

对于实际跨域工作的调用,您需要使用jsonp或脚本。有关同源策略的更多信息,请阅读此wiki。有关使用jsonp的详细信息,请参阅this answer

上面的代码将注入 dom 中下载的jscript并执行

答案 1 :(得分:-1)

$.ajax()设置查询,并立即返回,因此函数在请求完成之前返回。指定使用success完成查询时调用的函数。

function showGetResult(crossDomainUrl) {
    $.ajax({
        url: crossDomainUrl,
        type : 'GET',
        crossDomain: true,
        success: showData
    });
}

function showData(data){
    debug(data);
    return data;
}
showGetResult(crossDomainUrl);

请参阅http://jsfiddle.net/5J66u/8/ - (已更新以指定jsonp及其更好的网址)