2010-05-18 66 views
2

以下javascript代碼爲我提供了「> success- <」,即空數據。在我的瀏覽器中粘貼url會給我預期的內容。使用jQuery和ajax從公司wiki中獲取數據

$.get("http://company.tld/wiki/api.php?action=query&titles=Page%20Title&format=xml&prop=revisions&rvprop=content", function (data, status) { 
    alert(">" + status + "-" + data + "<"); 
}); 

這是一個MediaWiki wiki。以下是MediaWiki API規範:http://www.mediawiki.org/wiki/API:Query

爲什麼我沒有收到任何數據?

回答

0

您可能會違反此處的ajax跨域策略。 您嘗試訪問您的域名嗎?更好地說,從你的腳本中的一個?

根據我的經驗,如果您嘗試訪問來自外部域的數據,則無論如何,成功處理程序都會觸發。但正如你所描述的那樣,根本沒有數據。

+0

如果發生錯誤,成功回調將不會被調用,所以$ .get成功並返回 – Oleg 2010-05-18 09:47:15

+0

認真再次讀取,如果您生成一個jQuery ajax調用到外部域,成功處理程序被調用與空數據(測試Chrome) – jAndy 2010-05-18 10:07:44

+0

看起來你是對的。使用相同的URL嘗試使用GM_xmlhttpRequest。這樣可行。 (GreaseMonkey允許請求跨越「相同來源策略」邊界) – Tobbe 2010-05-18 10:23:11

0

如果data是一個對象,您將收到結果。嘗試在警報中使用typeof data

修訂: 要jAndy:在jQuery.ajax的文檔,我們可以看到以下(見http://docs.jquery.com/Ajax_Events):

  • 成功(本地事件)。 僅當請求成功時纔會調用此事件(服務器沒有錯誤,沒有數據錯誤)。

我只是想,我嘗試使用跨域調用執行以下代碼

try { 
    $.ajax({url:"http://en.wikipedia.org/w/api.php?action=query&titles=jQuery&format=xml&prop=revisions&rvprop=content", 
      success: function (data, status, x) { 
      alert ("ok"); 
      }, 
      error: function (data, status, x) { 
      alert ("not ok"); 
      }, 
      dataType:"xml"}); 
} catch (e) { 
    alert ("exception"); 
}; 

。在IE中,我可以看到「異常」警報。在Chrome和Firefox中:「不好」。功能成功將會在出現錯誤時調用而不是

所以來自服務器的數據對於Tobbe的url來說確實是一個空字符串(「」)。

To Tobbe:您應該添加最後一個參數「xml」。

+0

'typeof data'returns「string」 – Tobbe 2010-05-18 10:07:20

+0

你確定它沒有跨域調用嗎? – jAndy 2010-05-18 10:12:14