我弄乱了JSON对象,数组和字符串

时间:2015-12-09 14:00:12

标签: javascript php arrays json object

所以,我正在尝试将数据从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]。

那我错过了什么? 要温柔,我还在学习。

4 个答案:

答案 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中,您现在应该看到嵌套结构而不仅仅是字符串。

从这里开始检查值似乎是正确的,除非它告诉你出错了,否则我不会改变它。

文档:JSON.parse();

答案 3 :(得分:0)

您在PHP端编码一个JSON。你在JS方面没有解码

您应该查看JSON.parse()