【问题标题】:I mess up JSON object, arrays and strings我弄乱了 JSON 对象、数组和字符串
【发布时间】:2016-03-14 20:03:40
【问题描述】:

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

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

【问题讨论】:

标签: javascript php arrays json object


【解决方案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);
  }
});

【讨论】:

  • 哦,所以我可以在我的 ajaxcall 上添加“数据类型”......很酷。谢谢。
  • 是的,dataType: "json" 会认为返回信息是 json 并且你会得到结果已经是 json 看这里 - api.jquery.com/jquery.ajax
【解决方案2】:

看看$.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]);
}

【讨论】:

  • 哦,谢谢。效果很好!
【解决方案3】:

您在 PHP 端编码 JSON。你不是在 JS 端解码它。

你应该看看JSON.parse()

【讨论】:

    【解决方案4】:

    当您收到来自 AJAX 请求的数据时,它不是 JSON,只是一个字符串。

    您得到的length 结果是字符串length,而不是数组中元素的数量。

    此外,您正在设置 $balkTypes[],这意味着您正在尝试在 $balkTypes 的数组中添加 1 个条目,但是 $stmt-&gt;fetchAll(); 也返回一个数组,因此您现在有一个不需要的嵌套数组。

    在您的 PHP 文件中更改

    $balkTypes[] = $stmt-&gt;fetchAll()

    $balkTypes = $stmt-&gt;fetchAll()

    这将确保当您获取数据时,它将是一个包含所有对象的数组,而不是一个包含对象数组的数组。

    然后在你的 JS 中,不要尝试直接从字符串中读取,而是使用 JSON.parse()json 字符串 转换为 JS 对象/整数/数组/字符串/布尔值的集合

    例如

    success: function(result) {
        balkTypesData = JSON.parse(result);
        console.log(balkTypesData);
    }
    

    编辑

    正如Armen所指出的,您还可以在AJAX请求中设置dataType: 'json',当AJAX请求返回时,它会自动执行JSON.parse(),因此您可以直接console.log(result);查看输出。

    在 console.log 中,您现在应该会看到嵌套结构,而不仅仅是字符串。

    从这里开始检查值的循环似乎是正确的,除非它告诉您有问题,否则我不会更改它。

    文档:JSON.parse();

    【讨论】:

    • 解释得很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多