【发布时间】:2020-12-26 04:21:54
【问题描述】:
我有一个 PHP 脚本,我向其发出 Ajax 请求,大部分都可以正常工作,但我无法访问返回给 JavaScript 函数的数据中的数组。
所以,PHP 有一堆常规变量和一个数组。数组 $places 有四个元素,每个元素都有三个值,如下所示:
[["z","815","1"],["w","2813","0"],["s","1582","2"],["b","1220","5"]]
PHP 脚本的相关摘录是:
$encoded_places = json_encode($places); // if I don't do this then I end up with a value of "Array"
$qobject->name = "$name";
$qobject->multi = "$multi";
$qobject->places= "$encoded_places";
$myJSON = json_encode($qobject);
echo $myJSON;
在 JavaScript 脚本中(使用 JQuery),我成功地从 Ajax 请求中获取数据,并且可以访问所有数据,除了 $places 数据。
$.getJSON(url, function(data, status){
var stringified = JSON.stringify(data);
var parsedObj = JSON.parse(stringified);
var x = parsedObj.name; // alert(x); // which works fine
var myArray = new Array();
myArray.push(parsedObj.places);
for(var i = 0; i < myArray.length; i++){
console.log(myArray[i]);
}
...控制台将显示我所期望的,即:
[["z","815","1"],["w","2813","0"],["s","1582","2"],["b","1220","5"]]
但是,我在访问这些值时遇到了困难。例如,假设我尝试访问第一个元素的“815”部分,例如:myArray[0][1],我最终得到的是“[”。
我猜这整段数据只是一个字符串,而不是一个数组,但我对 JavaScript 不够熟悉,不知道如何进行。
例如,如果我在 JavaScript 脚本中执行此操作(希望在警报中看到 815、2813、1582 和 1220),我将看到的只是带有“[”的单个警报。 (即它只循环一次,并选择位置 1 的字符)。
for(var i = 0; i < myArray.length; i++){
console.log(myArray[i]);
alert(myArray[i][1]);
}
非常感谢有人解释: (a) 如何访问 JS 中的各个元素和值 (b) 我如何遍历它们,虽然大概一旦它是一个数组而不是一个字符串,那么上面的代码应该这样做。
非常感谢您的帮助。
现已解决: 正如@charlietfl 所指出的,在下面使用引号
$qobject->places= "$encoded_places";
把事情搞砸了,同时在 $places 上使用了 json_encode。但是,如果不删除引号,这两种方式都不起作用。所以,去掉引号,最后只在整个结构上使用 json_encode,现在可以正常工作了。
所以,上面给出的原始 sn-p 代码现在看起来像:
$qobject->name = $name;
$qobject->multi = $multi;
$qobject->places= $places;
$myJSON = json_encode($qobject);
echo $myJSON;
【问题讨论】:
-
console.log(typeof parsedObj.places)给你什么?此外,您不需要创建新的Array,因为它似乎已经是一个数组,而myArray.push只会将整个数组推入新Array的第一个位置,不确定这是否是您的想要。 -
不要对 $places 进行 json_encode。让
$myJSON = json_encode($qobject);做所有的序列化。解析时得到的是嵌套的 json 字符串,而不是你认为得到的数组 -
console.log(typeof parsedObj.places); // 字符串
-
那么你应该做
var myArray = JSON.parse(parsedObj.places)- 最终问题与@charlietfl 提到的有关 -
@goto1 内部使用
$.getJSON进行解析
标签: javascript php arrays json ajax