2011-11-24 92 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 

如果你不感興趣,發送任何自定義頁眉到服務器。然後只是下降訪問控制允許標題: