【问题标题】:jQuery how to read this JSON string from responseTextjQuery 如何从 responseText 读取这个 JSON 字符串
【发布时间】:2015-12-23 15:20:03
【问题描述】:

我在这里几乎尝试了所有关于堆栈溢出的方法,但不知何故,我无法读取从 jquery ajax 中的成功函数调用返回的 JSON 字符串数据。我的成功函数接收到以下 JSON 字符串:

Object {
  readyState = 4, responseText = "{"
  Response ":200,"
  Data ":"
  6 ","
  Message ":"
  6 "}", status = 200, statusText: "OK"
}

这是我的成功回调:

success: function(response, msg, responseText) {
   if (response.Response == 200) {
     console.log("Data was submitted");
     var obj = responseText;

     console.log(typeof obj);
   } else if (response.Response == 400) {
     console.log("there was some error");
   }
 }

当成功函数被触发并检查状态码时,它执行console.log("数据已提交");声明成功,但是,我无法访问 "Data":"6" 键/值对。

到目前为止,我已经尝试过这样做:

var obj = responseText;
console.log(obj.Data);

console.log(obj.data[1]);

和许多其他方式,但它要么说“未定义”,要么给出错误。但是,当我在控制台中使用 console.log(obj) 时,它会显示“obj”。这意味着我得到了一个 JSON 对象。

请注意,我也尝试过:

obj = jQuery.parseJSON(responseText);

这给了我一个错误:SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data

在这种情况下该怎么办?我希望能够提取键名“Data”的值:并将其值 ="6" 分配给变量。

【问题讨论】:

  • response.Responseresponse.Dataresponse.Message
  • 嗨@RoryMcCrossan 感谢您的回复。我尝试按照您的建议执行此操作: obj = responseText;控制台.log(obj.Data);但是,它表明:未定义
  • 嗨@RoryMcCrossan 哦哦哦!有效。谢谢你,兄弟。这么简单的错误。请发布它作为答案。这样我就可以标记它了。
  • response.Response 正在返回正确的值。在您提供的 JSON 对象中,响应和数据是同一对象的一部分...您是否尝试过 response.Data 而不是 responseText.Data
  • @Zafar Darin 得到了同样的答案。问题是您访问了 success 处理程序的错误参数

标签: javascript jquery json ajax


【解决方案1】:

成功回调的第一个参数是你需要的,不是第三个。第一个参数将表示从服务器返回的响应正文。此外,您不需要在成功回调中检查与 200 状态代码不同的任何内容。这就是 error 回调的设计目的,因为如果您的服务器返回 400 状态代码,成功回调将永远不会被触发。

所以:

dataType: 'json',
success: function (response) {
    console.log("Data was submitted");
    console.log(response.Data);
},
error: function() {
    console.log("there was some error");
}

【讨论】:

  • @oxfn 它在哪里说它们已被弃用?在 $.ajax 的文档中,任何一个参数都没有提及:api.jquery.com/jQuery.ajax
  • 谢谢。有效。有效。罗里是第一个提到它的人。如果他将其发布为答案,我会将其标记为答案。但是,@Darin,你是对的。和罗里一样。谢谢孩子们。这么简单的事情。我很惭愧:)
  • @RoryMcCrossan 抱歉,文档只提到了像 $.ajax({}).success().error() api.jquery.com/jQuery.ajax 这样的链式调用,参数正常
  • @Zafar 我认为您应该将达林的回答标记为已接受。他解决了这个问题,解释了它并改进了你的代码结构。
  • 嗨@RoryMcCrossan 我已经将其标记为答案。非常感谢。
【解决方案2】:

成功回调为success: function(data, textStatus, jqXHR )

所以第一个data 将包含返回给success 函数的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多