【问题标题】:How do I get at the raw JSON response from a jQuery $.getJSON() request?如何从 jQuery $.getJSON() 请求中获取原始 JSON 响应?
【发布时间】:2010-10-19 00:31:43
【问题描述】:

如何从 jQuery $.getJSON() 请求中获取原始 JSON 响应?

我只想在浏览器的alert() 对话框中打印原始响应?

【问题讨论】:

  • 您应该使用类似 firebug 的工具来查看原始 JSON。这比提醒某事有用得多。
  • @alex 是的,我知道。但这是隐藏文本框的前身,因此某些用户可以取消隐藏它并在电子邮件中复制/粘贴回复。说来话长。

标签: jquery json


【解决方案1】:

从 jQuery 1.5 开始,jqXHR 对象作为回调方法的第三个参数传入。 jqXHR 对象有一个包含原始 JSON 字符串的 reponseText 属性。

function callback(data, status, jqXHR) {
    alert(jqXHR.responseText);
    // or console.log(jqXHR.responseText);
}

【讨论】:

  • 是的,这在处理错误时非常有用:.fail(function (jqxhr, textStatus, error) { console.error("Response was: " + jqxhr.responseText); });
【解决方案2】:

如果你使用 JSONP,这根本不可能。

如果您向您的域发送正常请求,请将getJSON 替换为get

【讨论】:

  • 我没有使用 JSONP。尝试了您的建议,我只显示了[object Object]
  • @Kev:尝试添加dataType: 'text'
  • 在“放屁”之后,确实有效。这确实意味着将字符串解析为对象的额外步骤,但是 $.dump()JSON.stringify() 是另一种方式的额外步骤。
  • @gertas:完全不可能得到原始 JSONP 响应。我不确定你在说什么。
  • @SLaks:对,对不起,我的意思是 OP 询问的普通 $.getJSON 的同域场景。在 1.5 中可以使用 jqXhr 对象。见马里奥的回答。加入接受会很好。
【解决方案3】:

http://api.jquery.com/jQuery.getJSON/

我更喜欢使用完整的 .ajax 方法,这样我就不必记住抽象的各种签名。

文档告诉你这相当于 getJSON:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

你可以拥有的地方:

function callback(data) {
    alert(data);
}

我强烈建议您使用带有 console.log() 的 Firefox 和 Firebug;对于这种事情。一段时间后,警报会让你发疯。

编辑

根据其他回复,我可能误解了您的问题!您始终可以使用 Fiddler 查看原始响应。

【讨论】:

  • 这是我要打印的线路上的原始 json 字符串。这只是为了让我可以做一个快速的 hacky 调试来检查数组值。不过还是谢谢你。
  • Firebug 就是这样。只需更改为 function callback(data) { console.log(data);} 即可查看返回的整个对象。
  • console.log() 仍然像对象一样转储数据,而不是我真正想要的。我看不到原始 JSON(大括号、方括号、字段名称、疣和所有内容)。 Fiddler 确实有效,但我想最终将其嵌入到“秘密”文本框中。
【解决方案4】:

我最终使用了https://github.com/douglascrockford/JSON-js/blob/master/json2.js 中的JSON.stringify() 功能。

不理想,因为它是另一个正在加载的 javascript 文件,但它符合我的目的。

【讨论】:

  • 请注意,这不一定会返回您收到的实际 JSON。 (格式可能不同)
  • @slaks - 是的,但它暂时起到了作用。
【解决方案5】:

有许多不同的选项可以获取实际响应,无论是解析的 JSON 还是“getJSON”方法尝试解析但失败的浏览器/服务器生成的错误。

注意:使用 '.always' 方法时,参数会根据失败或成功进行更改。

$.getJSON(getData.php, function(data,textStatus,jqXHR) {
    console.log(jqXHR.responseText);

//As of 1.5 we have these methods:
}).always(
    function(jqXHR, textStatus, errorThrown) { //on failure
        console.log(jqXHR.responseText);
}).always(
    function(data, textStatus, jqXHR) { //on success
        console.log(jqXHR.responseText);
}).fail(
    function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR.responseText);

//As of 1.8 we have this method also:
}).then(
    function(data, textStatus, jqXHR) {
        console.log(jqXHR.responseText);}, 
    function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR.responseText);
});

如果您想了解更多信息,请访问:
http://api.jquery.com/jQuery.ajax/#jqXHR
http://api.jquery.com/category/deferred-object/

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 2014-02-24
    • 2012-07-11
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多