2010-09-23 26 views
10

它看起來像過去人們在接受標題時遇到問題,但我不確定我的問題是否相關。使用jQuery 1.4.2,我無法通過getJSON()獲得JSON。我可以在Firebug中看到請求/響應,看起來問題的根源在於,有問題的資源根據Accept頭返回不同的結果。即使文檔說它應該設置,在Firebug它顯示爲「/」 - 顯然,我想要「application/json」。這是一個已知的錯誤?我應該設置一些我不知道的標誌嗎?JQuery的getJSON()沒有正確設置Accept頭?

ETA:請求是跨站點的,如果有問題,但我傳遞callback=?查詢參數,以便JQuery(成功)將其視爲JSONP。我在這個特定情況下調用的服務支持接受覆蓋查詢參數(&accept=application/json),所以我得到它手動工作,但我仍然認爲標題搞砸是奇怪的,希望我能夠解決它,所以在處理可能不那麼寬容的不同服務時,我不會再遇到這種情況。我沒有一個簡單的方法來複制/代碼從我的開發環境,粘貼但這裏的要點是:

$.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){ 
    console.log(data); 
} 

正如你所看到的,這是不完全複雜,應該(我99 %肯定...)導致一個XHR與一個Accept頭部application/json一起發送。就像我說的那樣,根據Firebug的Net控制檯,這並沒有發生。如果它很重要,這是在Firefox 3.6.8。

ETA Again:對於任何人仍然閱讀這個,是的,它仍然在發生,不,我不知道爲什麼。就像我說的那樣,簡單的getJSON()調用,真正基本的語法,跨站點,被視爲JSONP,因爲它包含回調查詢參數。仍然接受建議!

+1

向我們顯示您的代碼,我們可能會幫助您更多。 – Steven 2010-09-23 18:22:24

+0

我在Chrome 8中遇到了完全相同的問題。$ .getJSON(「url」,function(data){})設置Accept標頭爲*/* – 2010-10-16 04:28:46

回答

13

這不是一個錯誤。

由於您的通話是跨域的,因此您的瀏覽器不允許您進行XHR呼叫(同源策略)。在內部,jQuery正在使用「<script>標記破解」來解決此問題,以進行跨域調用(這是JSONP數據類型背後的有趣想法)。由於調用是使用標記完成的,因此jQuery不可能修改標頭的accepts部分。

jQuery通過隱藏這些細節來發揮它的魔力,但不幸的是,在這種情況下,您似乎需要遵循Law of Leaky Abstractions

+0

非常有見地的答案 – 2015-04-07 13:40:25

2

沒有看到您的代碼(這可能指向我們明顯的解決方案),您可以嘗試使用標準的Ajax函數,看看你是否得到不同的結果?

$.ajax({ 
    url: '/what.eva', 
    dataType: 'json', 
    data: '{}', 
    success: callbackFunc 
}); 

function callbackFunc(result) { 
    alert(result); 
} 
+0

我試過了你的建議,取代了我的getJSON調用現在在主要問題中列出的細節)用$ .ajax調用,結果完全相同。我認爲這必須是一個已知的錯誤,或者也許只是說我的瀏覽器很奇怪,但這肯定與預期的行爲背道而馳。 – Coderer 2010-09-24 18:39:23

2

這是一個已經在jquery網站上關閉的bug。

http://dev.jquery.it/ticket/6551

似乎沒有成爲該修復呢。

+0

哇,所以別人有這個問題,但他們不能重現,所以他們關閉它?我會看看我是否可以對此作出貢獻... – Coderer 2010-10-26 23:12:31

+0

如果您好奇:票已解決,皮特的答案是正確的 - 即使*看起來像*「正常」的AJAX請求(XHR),它實現了一個動態的'

  • 11. Bitmap.SetPixel沒有設置正確的顏色
  • 12. 流星沒有設置正確
  • 13. appendChild沒有正確設置parentElement
  • 14. Python tkinter IntVars沒有正確設置
  • 15. Swift:Table Cells沒有正確設置按鈕
  • 16. 急救員沒有正確設置
  • 17. 搜索glyphicon沒有正確設置
  • 18. Dojo form.Select沒有正確設置值
  • 19. python與Gtk3沒有正確設置unicode
  • 20. Ruby PATH沒有正確設置
  • 21. knockout.js沒有正確設置選項
  • 22. Javascript函數innerHTML沒有正確設置
  • 23. QSplitter沒有正確設置尺寸
  • 24. UIButton沒有正確設置alpha
  • 25. 切換按鈕沒有正確設置
  • 26. 變量沒有正確設置
  • 27. 設置沒有正確存儲
  • 28. java.util.Calendar沒有正確設置月份
  • 29. MethodCallExpression沒有正確設置訂單
  • 30. 模塊沒有正確設置