jQuery 是否能够从服务器返回的 X-JSON HTTP header 中读取 JSON 数据?我一直在搜索 jQuery 文档,但我能找到的所有示例都使用请求正文而不是 header 中返回的 JSON。
最佳答案
是的,您需要调用 getResponseHeader
method的 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
}
}
请注意 try
/catch
适用于某些版本的 Firefox,如果 header 不存在,则会抛出错误。我不记得哪些版本受到了影响。
您有几种方法可以获取对 XMLHttpRequest
的引用jQuery 中的对象:
Hook 到
complete
ajax 请求的回调,而不是预期的success
回调(对于以何种顺序将参数传递给回调函数或全局 ajax 触发器的参数,jQuery 有点不一致):$.ajax({ // ... complete: function(xhr) { var data = getHeaderJSON(xhr); // do with data as you wish } })
或者,您可以保存对
XMLHttpRequest
的引用从调用.ajax
返回给您的对象/.get
/.post
等,通过 Closure .这允许您在您选择的任何回调中使用它(即success
或complete
,或error
):var xhr = $.ajax({ // ... success: function() { var data = getHeaderJSON(xhr); // access xhr var via closure // do with data as you wish } });
所以直接回答你的标题:不,jQUery 显然不支持这个 OOTB。
关于javascript - jQuery 是否支持从 X-JSON HTTP header 读取 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1814441/