我正在使用BASEX(XML数据库),我正在尝试使用Ajax连接到http服务器以执行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服务器上,但我得到了同样的错误:
来源http:/ localhost不允许使用access-control-allow-origin
我也尝试用计算机的ip替换本地主机但是我得到了同样的错误。
有人能帮助我吗?
答案 0 :(得分:2)
我想你无法让它工作的原因是需要一些服务器端编码。
尝试此操作,将Access-Control-Allow-Origin标头添加到HTTP响应并将值设置为*。这是您的信息的一段Java代码。
response.setHeader("Access-Control-Allow-Origin", "*")
答案 1 :(得分:1)
正如您所发现的,如果页面是从磁盘(null原点)提供的,某些浏览器不允许进行CORS请求。这是因为它被认为是一种安全风险,因为磁盘上的所有文件(包括/home/myself/mycode.html
和/tmp/84d8da9/dangerous_trojan.html
共享同一个域:磁盘。如果IE允许这样,则应将其视为错误。实际上,null origin(磁盘)甚至不允许常规的非CORS xmlHTTPrequest。
有些浏览器甚至不允许localhost
或127.0.0.1
或::1
等本地域发出CORS请求。因此仅从服务器上提供页面是不够的。
解决方法是为您的网页提供域名。出于开发目的,您无需购买域名。只需修改浏览器所在机器的hosts
文件即可。
我可能误解了你的问题。如果您没有尝试CORS请求,那么错误只是由于同源策略(CORS应该解决这个问题)。因此,解决方案是简单地确保网页和ajax源都来自同一个域。常规的非CORS ajax适用于本地域,因此请确保从http://localhost/
或http://localhost:8984/
提供您的网页和ajax源。如果您希望localhost
能够向localhost:8984
发出ajax请求,则必须在localhost:8984
服务器上实施CORS。