如何在jQuery中解析此JSON返回值?

时间:2012-10-12 20:57:26

标签: jquery json

我将JSON数组返回到我的jQuery函数脚本,但似乎无法正确获取语法 - 即使在此处阅读了十几个不同的示例之后。

这是调用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对象中的值的任何其他内容都会返回“undefined”,无论是

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语法更明显!)

非常感谢, rixter

7 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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!'); }
});

答案 2 :(得分:2)

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

将php输出更改为:

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

答案 3 :(得分:1)

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

以下是他们的例子:

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

答案 4 :(得分:1)

使用JSON.parse(rtnVal)此功能在所有最新浏览器中都可用,并将字符串转换为JSON

答案 5 :(得分:1)

好的,我想告诉你两件事。

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

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

其次,如果您正在处理对象,则需要使用点语法使用JavaSctipt访问该数据。处理数组时,可以使用方括号(key)语法。

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

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

答案 6 :(得分:1)

首先,和其他人一样,您的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);
}

尝试那样。