jQuery是否支持从X-JSON HTTP头读取JSON?

fri*_*edo 1 javascript jquery json http

jQuery是否能够从服务器返回的X-JSON HTTP头中读取JSON数据?我一直在搜索jQuery文档,但我可以找到的所有示例都使用请求体中返回的JSON而不是标头.

Cre*_*esh 5

是的,你需要调用getResponseHeader方法中的XMLHttpRequest对象,做手工的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
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意try/ catch对于某些版本的Firefox,如果不存在标头,则会引发错误.我不记得哪个版本受到了影响.

您有几种方法可以XMLHttpRequest在jQuery中获取对象的引用:

  1. 挂钩到completeajax请求的回调,而不是预期的success回调(jQuery与args以什么顺序传递给回调函数或全局ajax触发器的方式有点不一致):

    $.ajax({
      // ...
      complete: function(xhr) {
        var data = getHeaderJSON(xhr);
        // do with data as you wish
      }
    })
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者,您可以通过ClosureXMLHttpRequest从对.ajax/ .get/ .postetc的调用中保存对返回给您的对象的引用.这允许您在您选择的任何回调中使用它(即或者,或者就此而言):successcompleteerror

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

所以直接回答你的标题:不,jQUery显然不支持这个OOTB.