0

我不确定这是否是跨域问题。我正在尝试使用$.ajax加载文件。但是我得到了一些文件 readyState=4 和一些文件我得到了 readyState=1

这是我运行茉莉花测试的路径 file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html

在代码中,我使用 jQuery.pyte 来要求相关文件。但是当代码涉及 $.ajax 时,它停留在 readyState:1

如果我这样做,它会正确返回 readyState=4 并打印出 SpecRunner.html 中的内容


$.ajax({url: 'file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html', async: false}).responseText

但是如果我做这样的事情,我只会得到 readyState=1 并且什么都没有返回。


$.ajax({url: 'file:///home/myname/development/path1/path2/src/main/webapp/static/js/core/application/FileThatIWant.js', async: false}).responseText

4

2 回答 2

1

一般来说,您应该避免使用 file:// URL,因为浏览器不允许在许多不同的地方使用它们。试试XAMPP,它是一个简单易用的本地网络服务器,你肯定需要一个。

于 2012-11-06T23:05:27.497 回答
1

是的,这是一个跨域问题。您可以通过强制 jQuery 使用跨域 AJAX (JSONP) 来解决此问题。

$.ajax({
    url:            "yoururl",
    cache:          false,
    crossDomain:    true,
    data:           {}, //put your GET parameters here or directly into the url
    dataType:       "jsonp",
    processData:    true,
    success:        function(data, textStatus, jqXHR){
                        //This will be executed if it worked
                    },
    error:          function(data, textStatus, jqXHR){
                        //This will be executed if it failed
                    },
    timeout:        4000, //You can put any value here
    traditional:    true,
    type:           "GET"
});

jQuery 会自动添加一个包含随机字符串 (&callback=XXXXXX) 的回调参数。目标 URL 需要输出以下内容:

XXXXX(your_output_encoded_in_JSON);

其中 XXXXX 是随机字符串。这样做的 PHP 代码是:

echo $_GET["callback"]."(".json_encode($myoutput).");";

确保 PHP(或您使用的任何语言)页面仅输出!相反,如果您查询的页面不是动态构建的,例如 HTML 页面,您需要将以下选项添加到 $.ajax 选项对象:

jsonp:          false,
jsonpCallback:  "mycallback",
mimeType:       "text/javascript",

您的 .html 文件将包含如下内容:

mycallback("<html><head></head><body>TEST PAGE. This is a double quote: \" and I didn't forget to escape it!</body></html>");

这种技术非常方便绕过浏览器中硬编码的严格跨域限制,但它只支持 GET 参数。XMLHTTPRequest v2 支持跨域请求,但我们不能假设所有用户至少在 2016 年之前都拥有兼容 XHRv2 的浏览器。 http://caniuse.com/xhr2

于 2012-11-07T01:26:22.113 回答