2012-07-26 97 views
5

今天我在嘗試使用$.get獲取服務器上的PHP文件內容時遇到了一個非常奇怪的錯誤。

它只發生在Mac OS X(Snow Leopard)上的Safari和Chrome上,在Windows上它可以在所有瀏覽器中正常工作。

功能是這樣的:

function _fc() { 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 
  • 它不是一個本地服務器,它與現有的域
  • 我並不想進行任何跨域Ajax的Web服務器。這兩個文件都在同一個目錄中。

我找不到任何解決方案。

確切錯誤:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin. 
+0

當你說它只發生在Mac OS X上時,你指的是客戶端操作系統,對吧?這是你的Mac OS X測試和Windows測試中的同一臺服務器嗎? – 2012-07-26 14:01:18

+0

我知道這些是不同的瀏覽器,但在他們兩個我的代碼不起作用。我的服務器是基於Unix的,我只是在Windows和Mac OS X上進行測試。完全錯誤 - 請參閱編輯問題 – 2012-07-26 14:03:42

回答

0

我這樣做是這樣的:

$.get("http://<?php echo $_SERVER['HTTP_HOST']; ?>/_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { (...) 

你們是最好的。謝謝。

2

你的答案是錯誤消息:

XMLHttpRequest cannot load 
http://www.asking1.com/_x_fc.php?xaction=login&xv1=something&xv2=something. 
Origin http://asking1.com is not allowed by Access-Control-Allow-Origin.

http://www.asking1.comhttp://asking1.com不同來源,因此這屬於觸犯同源策略的。見第六個例子here

如果您的代碼確實與引用相關的URL不應該發生,因爲從錯誤消息文檔是http://asking1.com,所以相對路徑將解析爲http://askign1.com/_x_fc.php,這將是很好。

如果你的代碼中有絕對路徑,那就是你的問題。只需將其刪除即可看起來像引用的代碼。

如果你的代碼真的有相對路徑,那麼你需要挖掘一些東西。有些地方正在使瀏覽器認爲www.asking1.com內容的請求來自asking1.com

+0

但是,如果OP爲'$ .get'調用設置絕對路徑,那隻會是一個問題,其中因爲他們正在設置相對路徑,在這種情況下,除非有一個.htaccess文件重定向請求,否則實際域永遠不會有所不同。 – Gavin 2012-07-26 14:12:11

+0

@Gavin:True - 假設引用的代碼是準確的(不幸的是,我經常看到編輯過的代碼會縮短編輯出的錯誤)。無論如何,錯誤信息很明顯是SOP。 – 2012-07-26 14:13:48

2

www在技術上是一個子域。所以你違反了same-origin policy。你可以通過設置

function _fc() { 
    document.domain = "www.asking1.com"; 
    $.get("_x_fc.php", { xaction: 'login', xv1: $('#login').attr("value"), xv2: $('#pass').attr("value") }, function (data) { 

     if (data=='0') { letItGo=true; $('#loginform').submit(); } 
     else ...//Do some other checks 
    }); 
} 

解決這個或者你可以完全限定要傳遞爲您的AJAX請求的一部分,以確保它是同您的網址。

+0

我會試試看。 – 2012-07-26 14:33:44

相關問題