0

我正在向我的 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 语法更明显!)

非常感谢,里克斯特

4

7 回答 7

3

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

{ "allele_1": "value", ... }
于 2012-10-12T20:59:56.037 回答
2

如果你 make 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!'); }
});
于 2012-10-12T20:59:29.697 回答
2

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

将php输出更改为:

echo json_encode(array(
    'allele_1' => $ary[0],
    'allele_2' => $ary[1],
    'run_date' => $ary[2]
));
于 2012-10-12T21:01:14.667 回答
1

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

这是他们的例子:

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name ); //John
于 2012-10-12T20:59:29.467 回答
1

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

于 2012-10-12T20:59:40.817 回答
1

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

首先。当您将值从 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.

于 2012-10-12T21:01:22.773 回答
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);
}

试试这样。

于 2012-10-12T21:21:16.557 回答