【发布时间】: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 v1和PHP 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