我将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
答案 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);
}
尝试那样。