【问题标题】:Javascript JSON parse object, one object property undefined, throwing no errorsJavascript JSON解析对象,一个对象属性未定义,不抛出错误
【发布时间】:2016-01-29 12:34:21
【问题描述】:

我有一个非常独特的问题;在通过 xmlhttprequest 从 PHP 传递之后,我将 JSON 字符串解析回对象数组。我的 Web 应用程序使用几个不同的 sqlsrv_query 的结果反复执行此操作,但特别是一个查询变得非常有问题:id 值不一致。我的意思是,如果我在解析之前输出 JSON 字符串,则 id 值是一个 int,但在 JSON 解析之后它是未定义的。其余的值都很好,它只是 id(这是唯一的 int)。此外,在解析后,如果我将对象转换回 JSON 字符串,则恢复 int 值。如果我尝试像“object.prop”那样调用该属性,它会返回未定义。我已经检查,仔细检查和三重检查,没有错别字。我已经 console.logged 整个对象数组(在整个执行过程中的不同点)具有相同的结果。我在 SO、google 或 here 上找不到任何可以解释这种行为的东西,你可以吗?

这里有一些代码sn-ps。

xmlhttprequest回调函数内部:

var result1 = decodeURIComponent(xmlhttp.responseText);

console.log(result1); <-- * SEE OUTPUT BELOW *

if(result1.search('<br') === -1) {
    this.result = JSON.parse(result1);

} else {
    console.log(result1);
}

output:  [{"sheet_id":4054,"o_number":1,"o_description"...

对象被解析后,传递给另一个对象:

if(!result) {
    //var error = new ErrorLog();
} else {
    console.log(result); <-- * SEE OUTPUT BELOW *

output: [Object, Object, Object, Object, Object]
          0: Object
             prop1: someValue
             prop2: someOtherValue
             ...
             sheet_id: undefined

为了阻止巨魔,让我重申一下我对这个场景的测试程度:

在 Chrome 和 IE11 中产生相同的结果。我尝试对多个不同的记录执行相同的查询,但发生了同样的事情。返回 int 和字符串混合的大量其他查询(不同的查询)没有这个问题。我曾尝试关闭浏览器并重新打开,以防出现某种奇怪的临时异常。

我以前从未在这里发过帖子,因为我几乎总能通过一些研究找到问题的答案,但这超出了我的解决能力,所以我求助于 SO 的好人寻求帮助、任何解决方案、见解或将不胜感激在哪里寻找答案的想法。

【问题讨论】:

  • 如果您的问题具有重现性,我认为您应该尝试在jsfiddlecodepen 上重现它。人们为您提供帮助会容易得多。
  • 所以我采纳了您的建议并尝试重现该问题,但无法获得相同的结果,即使使用应用程序中使用的相同类,所以它必须是我忽略的网络应用程序中的某些内容,但这仍然令人困惑,因为我可以看到 json 字符串中的值,但在解析时却看不到。不幸的是,我无法在我的开发环境之外重现它,所以我想我只需要记下这个问题。
  • 确实,如果我们无法重现您的问题,人们将很难为您提供帮助……祝您好运! :-)
  • 已经有同样的问题,头疼得厉害:S

标签: javascript php json parsing xmlhttprequest


【解决方案1】:

它是有效的 json 格式。尝试使用JSON.parse()解析它

if(result1.search('<br') === -1) {
      this.result = JSON.parse(result1);

} else {
     console.log(JSON.parse(result1));
}

【讨论】:

  • 第二个输出是解析后在控制台中的样子。我在解析时没有收到任何错误。
  • 使用json.parse()??
  • this.result = JSON.parse(result1);
  • 这是在if() 我在谈论else
  • if() 用于捕获 php 错误,我将它们输出并且它们总是以
猜你喜欢
  • 2018-02-18
  • 2015-12-01
  • 1970-01-01
  • 2012-08-26
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多