2011-11-24 85 views
1

我正在尝试执行跨域ajax请求并将内容填充到我的JSP页面中的DIV中,我使用的javascript方法如下所示,Firefox不允许使用原型js库进行跨域Ajax GET请求

function fetchImgLeads(){ 
     var myAjax = new Ajax.Request(
        'http://someotherdomain:8080/imghtml?img=100', 
        { method:'GET', 
         parameters:{}, 
         requestHeaders :["Access-Control-Allow-Origin","*","Access-Control-Allow-Methods","POST, GET, OPTIONS","Access-Control-Allow-Headers", "X-PINGOTHER","Access-Control-Max-Age","1728000"], 
         onSuccess:function(t){ 
          alert(t.responseText.trim()); 
          $('imagediv').update(t.responseText); 
         }, 
         onFailure:function(t){ 
          //do something 
         } 
        } 
       ); 
    } 

我在加载时调用此函数,并在Firefox Web控制台中看到一条表示HTTP/1.1 401 Unauthorized的错误。在IE中同样的事情工作正常。我正在使用IE 8.0和Firefox 8。

除了requestHeaders,还有其他的东西需要补充吗?是

捕获HTTP头如下,即使再Ajax请求似乎并不奏效,

OPTIONS http://www.google.com/ HTTP/1.1 
Host: www.google.com 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip, deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Proxy-Connection: keep-alive 
Origin: http://localhost:8080 
Access-Control-Request-Method: GET 
Access-Control-Request-Headers: access-control-allow-headers,access-control-allow-methods,access-control-allow-origin,access-control-max-age,x-prototype-version,x-requested-with 

HTTP/1.1 405 Method Not Allowed 
Content-Type: text/html; charset=UTF-8 
Date: Fri, 25 Nov 2011 05:53:54 GMT 
Server: GFE/2.0 
Content-Length: 11819 
Proxy-Connection: Keep-Alive 
Connection: Keep-Alive 

回答

0

我面临同样的问题。

这是我发现了它为止:

https://developer.mozilla.org/En/Using_XMLHttpRequest

(火狐版本之前的Firefox 3允许您偏好capability.policy..XMLHttpRequest.open设置为allAccess给特定网站的跨网站的访问。这是不再受支持。)

  • 推荐的方式,从而实现跨站点脚本是使用访问控制允许来源HTTP头中的响应XMLHttpRequest的。

http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests

  • 头添加到服务器的HTTP响应头可以允许跨域请求成功。例如,Access-Control-Allow-Origin:*可以允许所有域访问服务器。 Access-Control-Allow-Origin可用于支持跨域请求的所有浏览器,其中包括Internet Explorer 8.W3C的规范在跨源资源共享中定义。

希望这将有助于...

+0

我已经在请求标题中添加访问控制允许来源,它与IE8罚款它不与火狐 – Abhishek

+0

@ilyavf检查是否这帮助你:http://stackoverflow.com/a/15300045/408872 – Katapofatico

0

您尝试发送“访问控制 - 允许 - *”头与要求。

相反,你的服务器应该回复这些标题。

CORS(预检)以这种方式工作:

  • 浏览器从服务器的权限请求发送请求:访问控制,请求 - *头(浏览器会自动将他们当你尝试做跨域请求)

  • 服务器与访问控制 - 允许 - 响应*头使浏览器知道它是否被允许发送实际请求

curl命令应该表现出你这样的事情:

 
curl -v -H 'Origin: http://myserver' -X OPTIONS -H 'Access-Control-Request-Methods: GET' -H 'Access-Control-Request-Headers: X-Requested-With' http://someotherdomain:8080/imghtml?img=100 
 
* Connected to someotherdomain port 8080 (#0) 
> OPTIONS /imghtml?img=100 HTTP/1.1 
> User-Agent: curl/7.30.0 
> Host: someotherdomain:8080 
> Accept: */* 
> Origin: http://myserver 
> Access-Control-Request-Methods: GET 
> Access-Control-Request-Headers: X-Requested-With 
> 
< HTTP/1.1 200 OK 
< Date: Wed, 08 May 2013 14:34:45 GMT 
< Access-Control-Allow-Origin: * 
< Access-Control-Allow-Headers: X-Requested-With 
< Access-Control-Allow-Methods: GET 
< Access-Control-Max-Age: 86400 
< Content-Length: 0 
< Content-Type: text/plain 
< 
* Connection #0 to host someotherdomain left intact 

如果你不感兴趣,发送任何自定义页眉到服务器。然后只是下降访问控制允许标题: