【问题标题】:parse array with JSON from xmlhttp.responseText使用来自 xmlhttp.responseText 的 JSON 解析数组
【发布时间】:2013-08-03 11:51:41
【问题描述】:

我正在尝试使用 ajax 将 php 数组转换为 js,并在 PHP 中通过 JSON 编码并在 JS 中解码,但无法获得所需的结果。

我在回显编码字符串之前使用 var_dump,这是输出:

$boardArrayEncoded = json_encode($boardArray);
var_dump($boardArrayEncoded);
echo $boardArrayEncoded;

JSON_encode 之后的这个字符串是:

string '{"1x1":0,"1x2":0,"1x3":0,"1x4":0,"1x5":0,"1x6":0,"2x1":0,"2x2":0,"2x3":0,"2x4":0,"2x5":0,"2x6":0,"3x1":0,"3x2":0,"3x3":0,"3x4":0,"3x5":0,"3x6":0,"4x1":0,"4x2":0,"4x3":0,"4x4":0,"4x5":0,"4x6":0,"5x1":0,"5x2":0,"5x3":0,"5x4":0,"5x5":0,"5x6":0,"6x1":0,"6x2":0,"6x3":0,"6x4":0,"6x5":0,"6x6":0}'

在javascript中我尝试解析它:

if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
   document.getElementById("logDiv1").innerHTML = xmlhttp.responseText;
   array = JSON.parse(xmlhttp.responseText);
}

这是 xmlhttp.responseText:{"1x1":0,"1x2":0,"1x3":0,"1x4":0,"1x5":0,"1x6":0,"2x1":0,"2x2":0,"2x3":0,"2x4":0,"2x5":0,"2x6":0,"3x1":0,"3x2":0,"3x3":0,"3x4":0,"3x5":0,"3x6":0,"4x1":0,"4x2":0,"4x3":0,"4x4":0,"4x5":0,"4x6":0,"5x1":0,"5x2":0,"5x3":0,"5x4":0,"5x5":0,"5x6":0,"6x1":0,"6x2":0,"6x3":0,"6x4":0,"6x5":0,"6x6":0}

在萤火虫上我得到语法错误:

SyntaxError: JSON.parse: unexpected character
[Break On This Error]   

array1 = JSON.parse(xmlhttp.responseText);

我做错了什么?我需要在JS中使用这个数组,如何正确编码?

提前致谢

【问题讨论】:

  • 根据jsonlint.org,您发布的JSON是有效的。你确定这就是你得到的吗?
  • 是的,这是 var_dump 和 innerHTML 打印的所有输出。
  • 好吧,如果 string 是响应的一部分(如果您的代码中确实有 var_dump),那就是问题所在。
  • 我试过 JSON.parse(上面的响应文本)它没有给我任何错误

标签: php javascript arrays json


【解决方案1】:

删除 var_dump。它是打印输出,这可能导致您所说的 responseText 不是完整的 responseText。

我希望您的 responseText 是:

string '{"1x1":0,"1x2":0,"1x3":0,"1x4":0,"1x5":0,"1x6":0,"2x1":0,"2x2":0,"2x3":0,"2x4":0,"2x5":0,"2x6":0,"3x1":0,"3x2":0,"3x3":0,"3x4":0,"3x5":0,"3x6":0,"4x1":0,"4x2":0,"4x3":0,"4x4":0,"4x5":0,"4x6":0,"5x1":0,"5x2":0,"5x3":0,"5x4":0,"5x5":0,"5x6":0,"6x1":0,"6x2":0,"6x3":0,"6x4":0,"6x5":0,"6x6":0}'
{"1x1":0,"1x2":0,"1x3":0,"1x4":0,"1x5":0,"1x6":0,"2x1":0,"2x2":0,"2x3":0,"2x4":0,"2x5":0,"2x6":0,"3x1":0,"3x2":0,"3x3":0,"3x4":0,"3x5":0,"3x6":0,"4x1":0,"4x2":0,"4x3":0,"4x4":0,"4x5":0,"4x6":0,"5x1":0,"5x2":0,"5x3":0,"5x4":0,"5x5":0,"5x6":0,"6x1":0,"6x2":0,"6x3":0,"6x4":0,"6x5":0,"6x6":0}

【讨论】:

  • 它完成了这项工作,我删除了 var_dump 及其工作,可能问题是 var_dump 正在写入 responseText 然后响应就像你在回答中提到的那样,阻止它在 JSON 中正确格式。
【解决方案2】:

检查内容类型:

  header('Content-type: application/json');

【讨论】:

    【解决方案3】:

    确保您只有echo $boardArrayEncoded;没有其他输出。还要确保没有前导空格或换行符,因为这也会破坏有效的 JSON 数据。在执行回显之前,请包含 header('Content-type: application/json'); 以将输出准备为 JSON。

    【讨论】:

      【解决方案4】:

      http://jsfiddle.net/ELc8L/

      var responseText='{"1x1":0,"1x2":0,"1x3":0,"1x4":0,"1x5":0,"1x6":0,"2x1":0,"2x2":0,"2x3":0,"2x4":0,"2x5":0,"2x6":0,"3x1":0,"3x2":0,"3x3":0,"3x4":0,"3x5":0,"3x6":0,"4x1":0,"4x2":0,"4x3":0,"4x4":0,"4x5":0,"4x6":0,"5x1":0,"5x2":0,"5x3":0,"5x4":0,"5x5":0,"5x6":0,"6x1":0,"6x2":0,"6x3":0,"6x4":0,"6x5":0,"6x6":0}'; // Your JSON string.
      parsedJSON=eval('('+responseText+')'); // Parsed JSON. Object.
      alert(parsedJSON["1x1"]); // Access object element's like this, because you can't write parsedJSON.1x1;
      for(element in parsedJSON){
          document.body.innerHTML+=element+" => "+parsedJSON[element]+"<br />";
      } // Just a vardump to show everything's perfect
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-25
        • 2017-05-18
        • 2018-04-20
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多