2009-11-29 66 views
1

jQuery能夠從服務器返回的X-JSON HTTP頭中讀取JSON數據嗎?我一直在尋找jQuery文檔,但我可以找到的所有示例都使用在請求正文中返回的JSON而不是標頭。jQuery是否支持從X-JSON HTTP頭文件讀取JSON?

+2

只是好奇,你爲什麼要使用頭來傳輸數據? – gahooa

+2

@gahooa:原型鼓勵它,因爲它比多部分響應「更容易」:http://devcentral.f5.com/weblogs/macvittie/archive/2009/04/07/ruby-developers-ignore-security-risks-claim -x-json-header-lsquonothing-seriousrsquo.aspx和http://www.ruby-forum.com/topic/94728揭示了這種情況。 –

回答

5

是的,你需要調用XMLHttpRequest對象的getResponseHeader method,和做手工的JSON反序列化:

function getHeaderJSON(xhr) { 
    var json; 
    try { json = xhr.getResponseHeader('X-Json') } 
    catch(e) {} 

    if (json) { 
    var data = eval('(' + json + ')'); // or JSON.parse or whatever you like 
    return data 
    } 
} 

注意,try/catch是針對Firefox的一些版本,如果標題是哪裏不存在錯誤拋出。我不記得哪個版本受到影響。

你有幾個方式來獲得jQuery中的XMLHttpRequest對象的引用:

  1. 勾入complete回調Ajax請求的,而不是預期的success回調(jQuery是一種WRT不一致的,以在傳遞什麼ARGS什麼順序什麼的回調函數或全局AJAX觸發):

    $.ajax({ 
        // ... 
        complete: function(xhr) { 
        var data = getHeaderJSON(xhr); 
        // do with data as you wish 
        } 
    }) 
    
  2. Alternat您可以通過Closure保存對撥打.ajax/.get/.post等返回給您的XMLHttpRequest對象的引用。這使您可以使用它,你選擇的任何回調(也就是爲此事successcomplete,或error)內:

    var xhr = $.ajax({ 
        // ... 
        success: function() { 
        var data = getHeaderJSON(xhr); // access xhr var via closure 
        // do with data as you wish 
        } 
    }); 
    

那麼直接回答你的標題:沒有,jQuery的顯然不支持此開箱即用的。

+0

我不知道OOTB是什麼意思。我擡起頭:「開箱即用」。一個變體是「出於藍色」。 – nalply

1

as of 1.4 jQuery的成功:回調接收XMLHttpRequest - (data,textStatus,XMLHttpRequest)。因此,您不必再使用complete:callback,如上所述。

希望我可以回覆上一個答案,而不是添加新的答案。