2012-03-07 113 views
0

我是新來javascript/jquery。jQuery.get()返回錯誤

我有以下的基本代碼,我不斷收到「錯誤」警報消息:

var jqxhr = $.get('my_url', 
       function(data) { 
       alert("success"); 
      }) 

      .success(function() { 
       alert("second success"); 
      }) 
      .error(function() { 
       alert("error"); 
      }) 
      .complete(function() { 
       alert("complete"); 
      }); 

需要注意的是,如果我複製並粘貼到瀏覽器中,我得到一個xml文件回來my_url。我究竟做錯了什麼?我如何獲得詳細的錯誤描述?

+0

使用瀏覽器的控制檯及其網絡選項卡。 – lonesomeday 2012-03-07 16:40:11

+1

只是爲了確認,'my_url'是**不是**變量,對嗎? – 2012-03-07 16:40:19

+1

使用Firebugs'net'標籤查看正在發送和接收的內容。 – Fermin 2012-03-07 16:40:45

回答

1

你的錯誤:

XMLHttpRequest cannot load 'my_url'. Origin null is not allowed by Access-Control-Allow-Origin. 

表明您具有相同起源的問題。您不能對與主機網頁的域不同的域執行ajax調用。

請參閱this MDN reference瞭解更多有關同一原產地政策同源產品的信息。

解決方法是使用JSONP(它使用不受同一起源策略限制的腳本標記),但這需要更改服務器以支持此操作的JSONP。

1

您是否在$ .ajaxSettings()函數中將響應類型更改爲'text/xml'?

如果您希望'text/html'作爲響應類型並獲取'text/xml',那麼這可能會導致問題。

此外,如果您使用Fiddler,您可以很好地瞭解響應中實際發生了什麼。

+0

謝謝Qpirate,我通過使用Chrome的'ctrl-shift-J'找出了問題所在。評論中有更多信息,你知道如何解決這個問題嗎? – Gevorg 2012-03-07 17:02:31

+0

我會使用JSONP來進行跨域調用。作爲@ jfriend00提到。 – Qpirate 2012-03-08 12:37:42

1

確實只有三種方法可以解決交叉來源問題。

  1. 使遠程服務器支持CORS
  2. 用戶的代理腳本或代理服務,如YQL
  3. 使用JSONP數據類型,其不支持跨域請求。此解決方案要求服務器返回JSONP而不是XML