【问题标题】:How do I parse this JSON return value in jQuery?如何在 jQuery 中解析这个 JSON 返回值?
【发布时间】:2012-10-12 20:57:26
【问题描述】:

我正在向我的 jQuery 函数脚本返回一个 JSON 数组,但似乎无法使语法正确——即使在这里阅读了大约十几个不同的示例。

这里是调用 jQuery ajax 函数:

$.ajax({
    url: "fetchAlleles.php",
    datatype: 'json',
    data: {'mndx': mndx, 'sndx': sndx },
    success: function(rtnval) {
      alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);
      //alert(rtnval);
    },
    error: function() { alert('Error!'); }
    });

这是返回值的 PHP 代码:

echo "{";
echo "allele_1: ", json_encode($ary[0]), "\n";
echo "allele_2: ", json_encode($ary[1]), "\n";
echo "run_date: ", json_encode($ary[2]), "\n";
echo "}";

如果我使用警报调试语句,我可以看到返回的结果是我所期望的:

{allele_1: "440"
allele_2: "480"
run_date: null
}

但我尝试读取 JSON 对象内的值的其他任何内容都会返回“未定义”,无论是

alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);

alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2);

alert("success: allele_1="+rtnval['allele_1'][0]+", allele_2="+rtnval['allele_2'][0]);

希望有人能提供帮助——这太令人恼火了! (希望 JSON 语法更明显!)

非常感谢, 瑞克特

【问题讨论】:

    标签: jquery json


    【解决方案1】:

    您的 JSON 内容似乎不是有效的 JSON - 您应该在字段名称周围加上引号,例如

    { "allele_1": "value", ... }
    

    【讨论】:

    • 更重要的是,它缺少逗号的:)
    【解决方案2】:

    如果你让datatype -> dataType 你的 json 将被 jQuery 解析。

    $.ajax({
        url: "fetchAlleles.php",
        dataType: 'json',
        data: {'mndx': mndx, 'sndx': sndx },
        success: function(rtnval) {
          alert("success: allele_1="+rtnval['allele_1']+", allele_2="+rtnval['allele_2']);
          //alert(rtnval);
        },
        error: function() { alert('Error!'); }
    });
    

    【讨论】:

      【解决方案3】:

      PHP json 输出无效,因为它不包含逗号。

      将php输出改为:

      echo json_encode(array(
          'allele_1' => $ary[0],
          'allele_2' => $ary[1],
          'run_date' => $ary[2]
      ));
      

      【讨论】:

        【解决方案4】:

        使用 jQuery.parseJSON 使这更容易http://api.jquery.com/jQuery.parseJSON/

        这是他们的例子:

        var obj = jQuery.parseJSON('{"name":"John"}');
        alert( obj.name ); //John
        

        【讨论】:

          【解决方案5】:

          使用JSON.parse(rtnVal)这个函数在所有最新的浏览器中都可用,并将字符串转换为JSON

          【讨论】:

            【解决方案6】:

            好的,我想向您建议两件事。

            首先。当您将值从 PHP 返回到 JavaSctipt 时,您只需执行一个 json_encode() 命令。只需在常规 PHP 数组中构建您的数据(是的,它可以是嵌套数组)。

            只需在脚本末尾执行一个echo json_encode($data)

            其次,如果您正在处理一个对象,您将希望使用 JavaSctipt 使用点语法访问该数据。处理数组时可以使用方括号(键)语法。

            • { 'key1':'value1' }
              在这里,您将使用data.key 获取value1

            • { 'key1':[ 'array_value1', 'array_value2', ... ] }
              在这里,您将使用data.key1[1] 获取array_value2

            【讨论】:

              【解决方案7】:

              首先,就像其他人提到的那样,您的 JSON 无效。 它应该是这样的:

              {
              "allele_1": "440",
              "allele_2": "480",
              "run_date": null
              }
              

              如果您不确定自己的 json,请尝试使用 jsonlint 之类的内容,它会为您检查。

              您在 php 中使用 json_encode() 的方式似乎也有点奇怪。最好将所有内容放在一个数组中,然后对整个数组进行一次 json_encode。您可以通过像这样在 php 中构造数组来重新创建 json 结果:

              $json_output = array(
                  'allele_1' => '440',
                  'allele_2' => '480',
                  'run_date' => null
              );
              
              echo $json_output;
              

              最后,您访问 $.ajax 响应的方式不正确,您访问的数据就像是一个数组,但它是一个对象。

              success: function(rtnval) {
                  alert("success: allele_1="+rtnval.allele_1+", allele_2="+rtnval.allele_2);
              }
              

              就这样试试吧。

              【讨论】:

              • 谢谢;这很有帮助。但是 PHP 中的“新数组”应该只是“数组”。另外,对象表示法仅在我通过 jQuery.parseJSON() 运行时才有效...见下文...但再次感谢。 --rixter
              • 不客气,你对“新数组”的看法是对的 我已经进行了编辑,我在使用 PHP 时经常犯这个错误,感谢您的通知 :) 我认为 JQuery当您输入“json”作为数据类型时,会处理 json 本身的解析,现在我明白为什么这对您不起作用了。这是因为您输入了“数据类型”,而您错过了大写字母 T,它应该是“数据类型”,因此不需要 parseJSON() 步骤,就像凯文 B 已经提到的那样。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-29
              相关资源
              最近更新 更多