2013-03-25 60 views
1

我有一個小問題,不能檢索csv響應。無法通過ajax請求獲取CSV文本

有可以在這裏找到link to csv

我想檢索該數據爲csv,但有一個與在效應初探特殊字符的問題。

我successfuly收到的數據,但是隨後的jQuery試圖對其進行解碼並通過語法錯誤: 我的要求是:

$.ajax({ 
    url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv', 
    dataType: "script", 
    success: function(data){ 
     alert('success'); 
    }, 
    error: function(test1, test2, test3) { 
     alert('error'); 
    } 
}); 

的誤差(原子%字符指向)

SyntaxError: syntax error 
1004+%28922%2F82%29,SamJohnston,2008-07-26+09%3A40,2013-03-07+18% 

我也嘗試將dataType設置爲文本以便不解碼數據。在這種情況下,我得到了ajax請求的錯誤。

$.ajax({ 
    url: 'http://toolserver.org/~daniel/WikiSense/Contributors.php?wikilang=en&wikifam=.wikipedia.org&page=Cloud+computing&since=&until=&grouped=on&order=-edit_count&max=1000&order=-edit_count&format=csv', 
    dataType: "text", 
    success: function(data){ 
     alert('success'); 
    }, 
    error: function(test1, test2, test3) { 
     alert('error'); 
    } 
}); 

我試圖與阿賈克斯進行實驗()的contentType參數,數據類型scriptCharset等它沒有幫助。

回答

0

在我看來,這是一個不可接受的跨域請求。閱讀herehere瞭解更多信息

1

dataType: "text"將是正確的。這聽起來像是你遇到了Same Origin Policy,它可以防止跨域呼叫。當您說dataType: "script"時,jQuery自動將請求轉換爲添加script元素,而不是進行實際的ajax調用。添加參考腳本跨域的script元素不違反SOP(這就是爲什麼我們可以使用像Google和Microsoft這樣的CDN作爲常用腳本的原因)。但是在抓取CSV時你不能這麼做,因爲CSV不是(當然)有效的JavaScript代碼。

如果您要檢索的服務器受您控制,並且您使用的是現代瀏覽器(其中in this case表示Chrome,Firefox或Opera的近期版本,或使用IE9或更高版本),您可以實現Cross-Origin Resource Sharing,如果服務器允許請求文檔的來源,則允許跨源Ajax調用。 CORS基本上意味着對HTTP OPTIONS呼叫作出響應,詢問是否可以使用適當的標頭髮送ajax呼叫。

+0

每當我遇到這個交叉來源問題時。在這種情況下,它最終是一個簡單的純文本,我試圖檢索。這可能是什麼原因違反了交叉來源政策?把這個URL放到瀏覽器中並顯示這個純文本有什麼不同?不幸的是服務器不在我的控制之下。 – eveferon 2013-03-25 08:15:59

+0

@eveferon:用戶從完全不同的位置加載請求資源的網頁與用戶自己做的網頁(通過將URL粘貼到地址欄中)之間存在巨大差異。 SOP有幾個原因,您可能會發現[此問題及其答案](http://stackoverflow.com/questions/1830050/why-same-origin-policy-for-xmlhttprequest)有幫助。 – 2013-03-25 08:35:39

+0

謝謝你的回答。我確信有很多人想知道同一個問題。因此,針對具有相同問題的人的簡化消息是:如果您的瀏覽器顯示來自外部域的內容並且有權訪問相應的對象,則這並不一定意味着您可以通過編程方式訪問它。 – eveferon 2013-03-25 14:30:08