我使用jquery自动完成插件从建议/自动完成中查找数组。
参考: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()
阵列无法识别?
如果数组的条目中包含一个字符串,则插件不会"接受"数组(可能是一个错误):
['tag1','a','tag2','tag3'] // won't work
['tag1','tag2','tag3'] // works
因此,PHP json_encode完全可以。
您的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" }
]
}