2010-10-13 49 views
2

我想使用JavaScript來製作一個簡單的http get。 我用jQuery來執行我的請求。我的代碼在IE8.0上運行,但不在Chrome(6.0版本)中運行。 我的頁面有如下代碼:(爲了簡化,我做了一個簡單的請求一個HTML頁面,但我需要的是其他)

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
    <html> 
     <script type"text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <SCRIPT TYPE="text/javascript" > 

    function sendGet(){ 
     $.get(
      "http://www.google.pt", 
      function(data) { 
       alert('page content: ' + data); 
     }); 
    } 
    </SCRIPT> 
    <head> 
     <title> Http Get Demonstration </title> 
    </head> 
    <body> 
     <p/> 
     <input type="button" value="Http Get" onclick="sendGet();" /> 
    </body> 
    </html> 

正如我所說的,當我加載在IE瀏覽這個網頁,然後按下按鈕,我得到了與HTML代碼的警報。但在Chrome中,警報顯示爲空文本(空?)。在「開發人員工具」的Chrome控制檯中,我收到以下消息:「XMLHttpRequest無法加載http://www.google.pt/.Access-null不被Access-Control-Allow-Origin允許。

任何人都可以解釋我這封郵件的含義是什麼?而我應該改變到我的頁面在Chrome中運行?

感謝

+0

你從google.pt得到什麼。嘗試使用自己的HTML或PHP頁面。 Chrome來自谷歌家族。他無法加載谷歌本身。 :) – zod 2010-10-13 13:46:38

+0

我試過與其他網頁。 (甚至一些託管在本地主機)問題不與源頁面。 – 2010-10-13 14:06:55

回答

8

由於same origin policy無法發送AJAX請求到一個比託管您的頁面不同的域。因此,除非您的網頁位於http://google.pt上,否則您無法向此網域發送AJAX請求。一種可能的解決方法是在您的域上設置服務器端腳本,該腳本將作爲google.pt與客戶端之間的橋樑,如果遠端域支持它,則使用JSONP

+0

爲什麼它在IE上工作呢? – 2010-10-13 13:44:12

+0

我認爲(但我不確定)您可以覆蓋IE設置中的安全策略以允許跨域請求。這不是默認設置,雖然大多數用戶都有,而且絕對不是你可以依賴的東西。當我使用默認設置在IE8上運行它時,完全相同的代碼失敗。我已經把一個[jsfiddle測試](http://www.jsfiddle.net/nMsCE/)。 Chrome和FireFox會顯示警報,但數據爲空,IE會因訪問被拒絕而失敗。 – 2010-10-13 13:47:40

+2

+1如果發送請求的頁面來自文件系統或本地主機,某些瀏覽器允許使用*。 Firefox和Chrome默認情況下更嚴格。 – user113716 2010-10-13 13:48:58

0

您是否直接從文件打開html文件(例如,地址欄是否顯示file:// usr/path/to/the/file)?

我們發現,在file://下運行時,chrome不會讓其他域中的文件'ajax'。但是,在Safari中它工作正常。
對我們來說最好的解決方案是使用類似MAMP的東西來運行本地的Apache服務器。

1

雖然我不記得我是否改變了任何IE選項,達林季米特洛夫似乎解釋我的問題。

我發現了一些技巧可以使用(超出季米特洛夫回答):