使用ajax加载.js文件跨域

dav*_*avy 0 javascript jquery

我正在尝试使用ajax访问跨域.js文件:

$.ajax({
    type:'get',
    crossDomain:true,
    url: "http://localhost/62588/scripts/bootStrapper.js",
    contentType: "application/json",
    dataType: 'jsonp'    
}).done(callback);
Run Code Online (Sandbox Code Playgroud)

我现在有一个回调:

getBootStrapperScript(function (callback) {         
       //do somethibg
})
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

XMLHttpRequest cannot load http://localhost/62588/scripts/bootStrapper.js. Origin http://localhost:62607 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关JSONP但我不确定如何使用它从anoather域加载.js文件.

如果我更改上面的代码使用'jsonp'作为数据类型,但我得到这个错误:

GET http://localhost/62588/scripts/bootStrapper.js?callback=jQuery18206067646441515535_1354459693160&_=1354459696966 404 (Not Found) 
Run Code Online (Sandbox Code Playgroud)

如何加载跨域js文件?

Dar*_*rov 6

不要使用任何AJAX,只需使用该$.getScript功能:

$.getScript('http://localhost/62588/scripts/bootStrapper.js').done(callback);
Run Code Online (Sandbox Code Playgroud)

如您所知,您可以将<script>标记指向您希望的任何域,而不会违反相同的源策略.这是JSONP的基础.但是您不需要任何JSONP,因为您只需要从远程域引用脚本,这就像将<script>标记指向此脚本一样简单,或者如果您想动态使用$.getScriptjQuery必须提供的功能您.


更新:

$.getScript函数会将随机缓存清除参数附加到URL.如果要获取脚本的缓存版本,可以定义自定义cachedScript 函数,如文档中所示:

jQuery.cachedScript = function(url, options) {
    options = $.extend(options || {}, {
        dataType: 'script',
        cache: true,
        url: url
    });
    return jQuery.ajax(options);
};
Run Code Online (Sandbox Code Playgroud)

然后:

$.cachedScript('http://localhost/62588/scripts/bootStrapper.js').done(callback);
Run Code Online (Sandbox Code Playgroud)