【问题标题】:echo'd PHP encode JSON called via AJAX returns what exactly?通过 AJAX 调用的 echo'd PHP 编码 JSON 返回究竟是什么?
【发布时间】:2011-06-18 06:42:40
【问题描述】:

我想我在这里遗漏了一些东西:

使用 AjAX 从数据库中获取一些数据并以 JSON 格式发回 $jsondata = 数组();

while ($Row = mysql_fetch_array($params))
{

    $jsondata[]= array('cat_id'=>$Row["cat_id"], 
                          'category'=>$Row["category"], 
                     'category_desc'=>$Row["category_desc"],
                     'cat_bgd_col'=>$Row["cat_bgd_col"]);
};

echo("{\"Categories\": ".json_encode($jsondata)."};");

我认为目前没有问题。

在客户方面,我收到了上述内容

ajaxRequest.responseText

如果我这样做

var categoriesObject = ajaxRequest.responseText; 
alert(categoriesObject);

我看到了我希望看到的,即警报中的整个数组。

一切都出错的地方是尝试访问响应。我得到的错误是“categoriesObject”不是一个对象 - 如果不是它是什么?让我烦恼的是,我什至无法像这样访问它:

document.write(categoriesObject.Categories[0].category);

那我做错了什么?

【问题讨论】:

  • 你需要把字符串解析成一个对象。使用有问题的 eval() 或使用 JSON 解析器。见这里:json.org/js.html 旁注,像 jQuery 这样的框架内置了这个

标签: javascript ajax json object


【解决方案1】:

您是否在准确解析 JSON?没有它是行不通的。

var categoriesObject = JSON.parse(ajaxRequest.responseText);

【讨论】:

  • 谢谢 - 与上一个答案相同,但我无法同时选择 - 抱歉!
【解决方案2】:
  1. 您不应手动创建 JSON。使用:

    echo json_encode(array('Categories' => $jsondata));
    

    或者只是

    echo json_encode($jsondata);
    

    我没有理由添加Categories

  2. 您必须在客户端解码 JSON,使用 JSON.parse(在大多数浏览器中可用,但也可作为 script 使用):

    var data = JSON.parse(ajaxRequest.responseText);
    
  3. 如果你想非常正确,请添加

    header('Content-type: application/json');
    

    到您的 PHP 脚本。

【讨论】:

  • 很不错,包罗万象。 +1
  • 我使用类别的原因是最终我将在数据中包含多个数组。我也没有提供完整的 php,但只是为了提供信息,你是非常正确的!我正在使用 header("Content-type: text/javascript");并不是说它实际上会影响我所看到的数据。
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 2011-10-11
  • 2013-06-30
  • 2011-09-29
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多