【问题标题】:Enconding json with php and parsing用php编码json并解析
【发布时间】:2015-01-19 15:59:44
【问题描述】:

我需要创建两个变量来运行这个结构的js

var sets = [{"label":"PHP","size":"6"},{"label":"SQL","size":"1"}];

var overlaps = [ {"sets":[0,1],"size":"0"}];

我正在尝试用 php 动态创建它,就像这样

$sets[] = array("label" =>"PHP", "size" => "6");
$overlaps[] = array("sets" => array(0,1), "size" => "0");
print json_encode(array($sets, $overlaps));

在 ajax 中我这样做

$.post(action
        , {param:param}
        , function(returned_data){

            console.log(returned_data);
            var json = $.parseJSON(returned_data);
            sets = json[0];
            overlaps = json[1];
});

Console.log 转储此

[[{"label":"PHP","size":"6"},{"label":"SQL","size":"1"},{"label":"JQuery","size":"1"}],[{"sets":[0,2],"size":"1"}]]

错误是“Cannot read property 'push' of undefined

怎么了?如何解析 json 并将每个部分分配给变量?

【问题讨论】:

  • 或者我是盲人,或者你的代码中没有“推送”?
  • 我在这里的原因!没有“推”
  • @KoenHoeijmakers 这可能是我 jQuery 的 parseJSON 的错误吗?
  • 问题只是分配。我认为关于“推送”的错误来自需要这些变量的其余代码。我会评论它并保留任务以尝试我得到的建议
  • 刚刚使用 JSON.parse 通过我的 xmlHTTPRequest 对象解析了这个。完美运行

标签: php json parsing


【解决方案1】:

我认为您不需要将其解析为 JSON,控制台暗示它已经是一个对象。此外,return 是几乎所有语言中的保留字(语言结构),因此您应该养成不将其用于变量名的习惯。

$.post(action
    , {param:param}
    , function(return_data){
        return_data = typeof return_data=='object' ? return_data : $.parseJSON(return_data);
        //The line above parses the string only if the browser didn't already recognize it as a JSON-object.

        console.log(return_data);
        sets = return_data[0];
        overlaps = return_data[1];
   });

另外,你应该在你的 PHP 中设置标题($.parseJSON 那时肯定不需要):

$sets[] = array("label" =>"PHP", "size" => "6");
$overlaps[] = array("sets" => array(0,1), "size" => "0");
header('Content-type: application/json'); //I added this line
echo json_encode(array($sets, $overlaps));

【讨论】:

    【解决方案2】:

    奇怪的错误。可能是因为您使用保留字作为变量。

    【讨论】:

    • Ahn.. 不,我使用的是“retorno”(葡萄牙语表示返回)。我将编辑问题以防止该错误
    【解决方案3】:

    jQuery $.post 已经需要 JSON,因此不需要 JSON 解析

    $.post(action
        , {param:param}
        , function(returned_data){
    
            console.log(returned_data);
            var json = returned_data;
            sets = json[0];
            overlaps = json[1];
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2017-09-16
      相关资源
      最近更新 更多