0

在阅读了关于 stackoverflow 的各种示例后,我编写了这个函数:

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

并使用它调用它

alert(showGetResult(crossDomainUrl));

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

4

2 回答 2

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 的更多信息,请参阅此答案

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

于 2013-10-03T12:13:49.843 回答
-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 和更好的 URL)

于 2013-10-03T12:55:31.670 回答