3

我正在使用 BASEX(一个 XML 数据库),我正在尝试连接到 http 服务器以使用 Ajax 执行 REST 请求。我的代码在 IE 中运行良好,但不适用于 Firefox 或 Chrome。我为ajax查询尝试了两种方法。

这是第一个:

var jqxhr = $.get( "http://localhost:8984/rest/factbook?query=//city&wrap=yes", function(data)

这段代码在 IE 上有效,但在其他浏览器上无效,经过一番研究我发现来源有问题:

access-control-allow-origin 不允许 origin null

第二个:

$.ajax({
    type: "GET",
    url: "http://localhost:8984/rest/factbook?query=//city&wrap=yes",
    contentType: "xml/application",
    dataType: "xml",

此代码适用于 IE,但在其他浏览器上出现 404 错误。

我试图把我的脚本放在一个 wamp 服务器上,但我得到了同样的错误:

access-control-allow-origin 不允许 origin http://localhost

我也尝试用计算机的 ip 替换本地主机,但我得到了同样的错误。

有人能帮助我吗 ?

4

2 回答 2

2

我猜你无法让它工作的原因是需要一些服务器端编码。

试试这个,将 Access-Control-Allow-Origin 标头添加到 HTTP 响应并将值设置为 *。这是一段 Java 代码供您参考。

response.setHeader("Access-Control-Allow-Origin", "*")

于 2013-11-07T02:29:55.547 回答
1

正如您所发现的,如果页面是从磁盘提供的(空源),某些浏览器不允许发出 CORS 请求。这是因为它被认为是一种安全风险,因为磁盘上的所有文件都包括/home/myself/mycode.html/tmp/84d8da9/dangerous_trojan.html共享同一个域:磁盘。如果 IE 允许这样做,那么它应该被视为一个错误。实际上,空源(磁盘)甚至不允许常规的非 CORS xmlHTTPrequest。

一些浏览器甚至更进一步不允许本地域,例如localhost127.0.0.1::1发出 CORS 请求。因此,仅仅从服务器提供页面是不够的。

解决方法是给您的页面一个域名。出于开发目的,您不必购买域名。只需修改hosts浏览器所在机器的文件就足够了。


我可能误解了你的问题。如果您没有尝试 CORS 请求,那么该错误仅仅是由于同源策略(CORS 应该可以解决)。所以解决方案是简单地确保网页和 ajax 源都来自同一个域。常规的非 CORS ajax 可在本地域上运行,因此请确保您的网页和 ajax 源均来自http://localhost/http://localhost:8984/. 如果您希望localhost能够向您发出 ajax 请求,则必须在服务器localhost:8984上实现 CORS 。localhost:8984

于 2013-10-17T13:55:32.733 回答