我不确定这是否是跨域问题。我正在尝试使用$.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
答案 0 :(得分:1)
一般来说,你应该避免使用file:// URL,因为浏览器不允许在很多不同的地方使用它们。试试XAMPP它是一个简单易用的本地网络服务器,你肯定需要一个。
答案 1 :(得分: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