来自本地文件系统的 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... 运行并试图获取 url http://:localhost/ 的内容。无论如何,请参阅下面的答案...

以上是关于来自本地文件系统的 jQuery Ajax 请求(Windows 文件:///)的主要内容,如果未能解决你的问题,请参考以下文章

来自本地文件的jQuery ajax POST访问跨域不起作用

jQuery ajax读取本地json文件

来自 jQuery.ajax 请求的 403 Forbidden 响应与 PhoneGap 桌面

jQuery+ajax请求本地数据加载商品列表并跳转详情页

JQuery ajax

如何在 Firefox 中解码来自 jQuery $.ajax 请求的 XML 响应