【问题标题】:PHP json_encode not working with 1-dimentional arrayPHP json_encode 不适用于一维数组
【发布时间】:2015-05-03 02:02:16
【问题描述】:

我正在使用 jquery-autocomplete 插件从建议/自动完成中查找数组。

参考:https://github.com/devbridge/jQuery-Autocomplete

PHP(1)

$stmt = $dbh->query("SELECT tag_name FROM tags");
$tags = array();
$tags = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
echo json_encode($tags);
/*
    var_dump($tags);
    "array(6) {
      [0]=>
      string(1) "tag1"
      [1]=>
      string(2) "tag2"
      [2]=>
      string(3) "tag3"
      [3]=>
      string(4) "tag4"
    }
    "
*/

PHP (2)

echo ('["tag1","tag2","tag3","tag4"]');

PHP (3)

$a = ["tag1","tag2","tag3","tag4"];
echo json_encode($a);

JavaScript

$.ajaxSetup({ cache: false, async: false });

var myTags = [];
$.get( '/action.php', {action: 'get_tags'}).done( function(data){
  console.log(data);
  myTags = eval(data);
  //myTags = JSON.parse(data);
});

$('#tagInput').autocomplete({
  lookup: myTags
});

PHP v1 和 PHP v2 都将提供正确的数组 console.log(data)。 但是,来自 PHP v1 json_encode($tags) 的数组不适用于插件(它根本无法识别数组)。虽然 PHP v2 数组 echo ('["tag1","tag2","tag3","tag4"]'); 工作得很好。 PHP v3 也不起作用。

这段代码有什么问题?为什么json_encode() 数组不被识别?

【问题讨论】:

  • PHP v1PHP v2 是什么意思?
  • 这些解决方案都不应该起作用,因为您在收到 Ajax 响应之前调用$('#tagInput').autocomplete({...})。见Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
  • @Ranjith 我的意思是两个代码都拥有相同的输出数组,但 v2 有效,v1 无效
  • 要继续 @FelixKling 的评论:您需要将 $('#tagInput').autocomplete({...}) 移动到 $.get().done 并在 ajax 请求完成后使输入可访问。
  • $('#tagInput').autocomplete({...}) 代码放在哪里并不重要。问题依旧。 V2 工作。 V1 没有。

标签: javascript php arrays json pdo


【解决方案1】:

如果数组的条目中包含单个字符的字符串,插件将不会“接受”(可能是错误)数组:

['tag1','a','tag2','tag3'] // won't work
['tag1','tag2','tag3'] // works

所以,PHP json_encode 一切正常。

【讨论】:

    【解决方案2】:

    您的 v2 有效,因为您使用一系列字符串作为建议,如下所示:

    {
      "query": "Unit",
      "suggestions": ["United Arab Emirates", "United Kingdom", "United States"]
    }
    

    当您要提供数据时,字符串数组的直接 json_encode 将不起作用。你需要一个特殊的结构:

    {
      // Query is not required as of version 1.2.5
      "query": "Unit",
      "suggestions": [
          { "value": "United Arab Emirates", "data": "AE" },
          { "value": "United Kingdom",       "data": "UK" },
          { "value": "United States",        "data": "US" }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 2013-11-28
      • 2018-10-10
      • 2020-11-20
      • 2013-02-04
      • 2023-03-13
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      相关资源
      最近更新 更多