所以,我正在尝试将数据从php发送到js。
PHP
$balkTypes[] = $stmt->fetchAll();
echo json_encode($balkTypes);
JS
balkTypesData = {}; //Outside Ajaxcall
success: function(result){
balkTypesData = result;
Console.log(balkTypesData);
}
控制台
[[{"id":"3","typ":"Bas 200*600","hojd":"200","bredd":"600","rec":"","viktM":"135"},{"id":"2","typ":"Bas 240*600","hojd":"240","bredd":"600","rec":"","viktM":"160"},{"id":"5","typ":"Isol\u00e4tt 240*600","hojd":"240","bredd":"600","rec":"","viktM":"105"},{"id":"4","typ":"Kontur 240*600","hojd":"240","bredd":"600","rec":"","viktM":"105"},{"id":"6","typ":"Passbit","hojd":"0","bredd":"0","rec":"","viktM":"0"}]]
现在,我想搜索我的Json对象?!
我想为“typ:Bas 200 * 600”发现“viktM”。
//Get balkType weight/m
var searchField = "typ";
var searchVal = "Bas 200*600";
for (var i=0 ; i < balkTypesData.length ; i++){
if (balkTypesData[i][searchField] == searchVal) {
weigth = balkTypesData[i]['viktM'];
console.log(weigth);
}
}
首先,我无法在“balkTypsData”上使用.lengt
。它给了我410次点击。必须是所有人物?
其次,我找不到如何访问我的部分对象
如果我使用:console.log(balkTypesData[i][searchField]);
我得到:“未定义”
我也试图删除“[i]。
那我错过了什么? 要温柔,我还在学习。
答案 0 :(得分:5)
看看$.parseJSON()
(jQuery)或JSON.parse()
(香草):
使用jQuery
success: function(result){
balkTypesData = $.parseJSON(result);
console.log(balkTypesData);
console.log(balkTypesData[i][searchField]);
}
没有jQuery
success: function(result){
balkTypesData = JSON.parse(result);
console.log(balkTypesData);
console.log(balkTypesData[i][searchField]);
}
答案 1 :(得分:1)
在jQuery $ .ajax请求中设置附加属性dataType: 'json'
$.ajax({
type: "POST",
dataType: "json",
url: url,
data: { params },
success: function( response )
{
// Your data will be already json no need to parse it
console.log(response);
}
});
答案 2 :(得分:1)
当您收到来自AJAX请求的数据时,它不是JSON,只是一个字符串。
您获得的length
结果是字符串的length
,而不是数组中元素的数量。
此外,您正在设置$balkTypes[]
,这意味着您尝试在$balkTypes
数组中添加1个条目,但$stmt->fetchAll();
也会返回一个数组,因此您现在拥有一个嵌套数组这是不需要的。
在PHP文件更改
中 $balkTypes[] = $stmt->fetchAll()
到
$balkTypes = $stmt->fetchAll()
这将确保在您获取数据时它将是一个包含所有对象的数组,而不是包含对象数组的数组。
然后在你的JS中,不是试图直接读取字符串,而是使用JSON.parse()
将 json字符串转换为JS对象/整数/数组/字符串/布尔值的集合
e.g。
success: function(result) {
balkTypesData = JSON.parse(result);
console.log(balkTypesData);
}
修改强>
正如Armen所指出的,你也可以在AJAX请求中设置dataType: 'json'
,当AJAX请求返回时,它会自动执行JSON.parse()
所以你可以直接{{1}看到输出。
在console.log中,您现在应该看到嵌套结构而不仅仅是字符串。
从这里开始检查值似乎是正确的,除非它告诉你出错了,否则我不会改变它。
答案 3 :(得分:0)
您在PHP端编码一个JSON。你在JS方面没有解码。
您应该查看JSON.parse()