来自本地文件系统的 jQuery Ajax 请求(Windows 文件:///)
Posted
技术标签:
【中文标题】来自本地文件系统的 jQuery Ajax 请求(Windows 文件:///)【英文标题】:jQuery Ajax request from local filesystem (Windows file:///) 【发布时间】:2011-07-25 01:49:12 【问题描述】:我正在尝试执行 ajax 请求以获取在 Windows Wamp Server 上运行的 "http://localhost/"
的内容。
脚本是这样运行的:
file:///C:/my/path/index.html
我只是使用标准的 $.ajax 请求来尝试获取 localhost 的内容:
$.ajax(
type: 'GET',
url: 'http://localhost/',
success: function(data)
alert('success');
, error: function (data)
alert('failed');
);
虽然我无法让它成功......似乎是本地文件系统或其他东西的问题。我不太确定。
【问题讨论】:
网址试试/
,然后试试/index.html
可以直接访问网址吗? js控制台报错了吗?
@adam - 是的,直接访问 url 就可以了。我收到此错误Uncaught TypeError: Property 'responseText' of object #<Object> is not a function
在尝试 http://XMLHttpRequest cannot load http://localhost/. Origin null is not allowed by Access-Control-Allow-Origin.
时我也收到此错误
@Emmanuel 第二个错误是当您尝试来自file:///
URL 的AJAX 请求时Chrome 给出的错误。
@lonesomeday - 是的,通过谷歌搜索我发现答案是设置一个 Access-Control-Allow-Origin 标头。请参阅下面的帖子...
【参考方案1】:
问题解决了!
我只需将此标头添加到我的 index.php 文件中以获取 http://localhost/
header('Access-Control-Allow-Origin: *');
谢谢你们的帮助!
【讨论】:
嗨,Emmanual,我和你的情况一样。但是我没有任何服务器代码,我使用了数据库代理服务器 dbmojo [链接](code.google.com/p/dbmojo/)。我的脚本位于本地 file:// 目录中。现在我怎么能把 header('Access-Control-Allow-Origin: *'); ?还是有其他解决方案? @iEamin 我不确定您的具体情况......也许可以通过您的 apache (.htaccess) 或其他服务器配置文件添加标题“Access-Control-Allow-Origin”?我不知道。我不知道有另一种方式来做这样的跨服务器/协议请求。【参考方案2】:您说脚本从file:///
URL 运行。最好不要从file
URL 发出 AJAX 请求,因为它们的处理方式不一致。例如,Chrome 完全不允许它们。
但是,这里更大的问题是同源策略:您只能向与网页本身相同的主机发出 AJAX 请求。 file:///
和 http://localhost
不是同一台主机(即使它们是同一台机器)。
最好在http://localhost
上运行所有内容。
【讨论】:
不幸的是,我认为你是对的 :(。可能对安全性有好处,但对我的情况不利。【参考方案3】:这可能行不通,因为浏览器会认为这是一个跨域请求。您已通过 file:// URL 访问了该文件,但正在尝试从 http://localhost 检索数据。尝试从http://localhost 访问您的原始文件,它可能会开始工作。
【讨论】:
是的,可以从localhost 访问它。但基本上我试图用 file:/// 脚本做的是通过发送 ajax 请求并检查结果来检测 wampserver 是否正在运行。 @Emmanuel - 您上面的代码显示您使用的是 url,但在这里您说您使用的是文件路径。是哪个? @adam - ajax 请求正在从 file:///etc... 运行并试图获取 urlhttp://:localhost/
的内容。无论如何,请参阅下面的答案...以上是关于来自本地文件系统的 jQuery Ajax 请求(Windows 文件:///)的主要内容,如果未能解决你的问题,请参考以下文章
来自本地文件的jQuery ajax POST访问跨域不起作用