我正在研究一些Javascript在我的电脑上本地运行.我正在使用jQuery CSV插件(http://plugins.jquery.com/project/csv)将csv文件加载到javascript数组中.脚本很简单:
$(function(){
$.get("file.csv", function(data){
stuff = $.csv()(data);
})
})
Run Code Online (Sandbox Code Playgroud)
在Firefox中它工作正常,但在Chrome中它说"Access-Control-Allow-Origin不允许使用Origin null".那是什么意思?我找到了与此错误相关的跨服务器内容的各种线程,但我只是使用本地文件.
我有一个非常简单的测试页面,它使用jQuery的$ .getJSON和$ .ajax方法的XHR请求.同一页面在某些情况下有效,而在其他情况下则无效.特别是,它在Ubuntu上的Chrome中不起作用.
我正在使用Chrome 5.0.342.7测试版测试Ubuntu 9.10,使用Chrome 5.0.307.9测试版测试Mac OSX 10.6.2.
可以从这里下载tar/gzip文件中的一小组3个文件:http: //issues.tauren.com/testjson/testjson.tgz
当它工作时,Chrome控制台会说:
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:16Using getJSON
index.html:21
Object
result: "success"
__proto__: Object
index.html:22success
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:29Using ajax with json dataType
index.html:34
Object
result: "success"
__proto__: Object
index.html:35success
XHR finished loading: "http://issues.tauren.com/testjson/data.json".
index.html:46Using ajax with text dataType
index.html:51{"result":"success"}
index.html:52undefined
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,Chrome控制台将显示以下内容:
index.html:16Using getJSON
index.html:21null
index.html:22Uncaught TypeError: Cannot read property 'result' of null
index.html:29Using ajax with …Run Code Online (Sandbox Code Playgroud) 我已经在SO上阅读了其他相同的原始策略主题,但我还没有看到任何与本地文件系统相关的解决方案.
我有一个网络应用程序(在一个松散的意义上)必须在本地服务.我试图在用户加载页面后加载大量数据,具体取决于他们在网页上做了什么.在Firefox 3.5和IE8中,我可以使用jQuery的AJAX()和GetScript()方法来执行此操作,但在Chrome中由于同源策略而失败.
XMLHttpRequest无法加载file://test/testdir/test.js.原产地null是不允许的by Access-Control-Allow-Origin.
这种情况发生在我做一些简单的事情时
$.getScript("test.js");
Run Code Online (Sandbox Code Playgroud)
这在IE和Firefox中运行良好.
在阅读了大量有关此内容之后,我决定尝试直接写入文档的头部.在Chrome的控制台中,我键入了以下内容:
var head = document.getElementsByTagName("head")[0];
var script =document.createElement('script');
script.id = 'uploadScript';
script.type = 'text/javascript';
script.src = "upload.js";
head.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
这在粘贴到控制台中时工作正常 - <script...test.js</script>元素被添加到头部,评估,并且内容被加载到DOM中.
我认为这是成功的,直到我将此代码放入函数调用.从函数调用时,相同的确切代码会将元素添加到但不会评估JavaScript文件.我无法弄清楚为什么.如果我使用Chrome的控制台停止执行它正在添加元素的方法并运行上面的代码,它就不会对它进行评估.但是,如果我取消暂停执行并运行完全相同的代码(在控制台窗口中粘贴它),它就可以工作.我无法解释这一点.以前有人处理过这个吗?
我已经阅读了以下SO帖子,但他们没有描述我的问题:
绕过同源策略的方法
XMLHttpRequest Origin null不允许Access-Control-Allow-Origin for file:///到file:///(无服务器)
跨站点XMLHttpRequest
同样,我最后的办法是在网页加载时加载所有数据 - 这可能导致加载网页最多延迟10秒,这对90%的应用用户来说是不必要的.
感谢您的任何建议/选择!
我正在关注一本书的例子,因此代码非常简单.
这是代码:
jQuery.get("ajax_search_results.php",
{ s:search_query },
write_results_to_page, "html");
Run Code Online (Sandbox Code Playgroud)
代码是ajax_search_results.php:
<div id="ajax_search_results">
<ul>
<li><a href="#">First result</a></li>
<li><a href="#">Second result</a></li>
<li><a href="#">Third result</a></li>
<li><a href="#">More...</a></li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
这在Firefox中可以正常工作.但在Chrome中,我可以在JS控制台中看到错误消息:
XMLHttpRequest cannot load
file:///C:/xampp/xampp/htdocs/snk/ajax_search_results.php?s=keyword.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'null' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
你能帮忙找出问题所在吗?
这是我的代码:
this.loadMap = function () {
this._map = null;
this._width = 0;
this._height = 0;
this._playerX = 0;
this._playerY = 0;
this.finished = false;
this.loaded = false;
$.ajax({
type: "GET",
url: "maze1.xml",
dataType: "xml",
success: this.parseXmlMap,
context: this
});
};
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
"XMLHttpRequest无法加载file:/// C:/wamp/www/mazegame/maze1.xml.Access-Control-Allow-Origin不允许使用Origin null.
这个相同的脚本在Firefox中运行良好
我想提供一个Javascript代码,它可以在任何包含它的网站上运行,但它总是需要在托管Javascript的服务器上获取更多数据(甚至修改数据).我知道出于明显的原因存在安全限制.
考虑在xyz.com上托管的index.html,其中包含以下内容:
<script type="text/javascript" src="http://abc.com/some.js"></script>
Run Code Online (Sandbox Code Playgroud)
some.js是否能够使用XMLHttpRequest将数据发布到abc.com?换句话说,abc.com是否被隐含信任,因为我们从那里加载了Javascript?
我有一个包含以下代码的code.html文件.
$.ajax({
type: "POST",
datatype: "JSONP",
url: "path",
success: function(msg){
var e = document.createElement("div");
e.id = "ads";
document.body.appendChild(e);
$("#ads").html(msg);
}
});
Run Code Online (Sandbox Code Playgroud)
当我在浏览器中打开code.html文件时,它会出错:
**"XMLHttpRequest cannot load file://..... Origin null is not allowed by Access-Control-Allow-Origin."**
Run Code Online (Sandbox Code Playgroud)
请帮我!!如何避免这个问题
我有客户端javascript,我想从本地csv文件中读取.在html代码中,我使用脚本标记导入本地javascript文件,此js文件位于另一个文件夹中.
js文件的内容
$.ajax({
type: "GET",
url: "./../../data/English.csv",
dataType: "text",
success: function(data) {
alert("worked");
},
error: function (request, status, error) {
alert(request.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
csv文件的路径是相对于html文件的.但是会触发错误功能.有没有办法来解决这个问题?
谢谢