我的自动完成功能不起作用,我已经提醒了ajax的响应,它是json
<script src="../jquery.js" type="text/javascript"></script>
<link href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js" type="text/javascript">
</script>
$(document).ready(function(){
var arr=[];
$.ajax({
type:'POST',
url:'showtags.php',
success:function(res)
{
arr = $.parseJSON( res );
$('#tags').autocomplete({
source:arr
});
}
});
});
我还发现arr不是一个数组,因为当我们做警报(arr)时,javascript中显示所有元素的正常数组,但是它表示[Object object]。
res变量是= {“1”:“你好”,“72”:“打电话给你”,“73”:“这是我”}
arr变量是= object {1 =“hello”,72 =“call you”,73 =“this is me”}
答案 0 :(得分:1)
你必须在你的ajax调用的成功处理程序中调用自动完成的构造函数,如下所示:
$(document).ready(function(){
var arr=[];
$.ajax({
type:'POST',
url:'showtags.php',
success:function(res)
{
arr = $.parseJSON( res );
$('#tags').autocomplete({
source:arr
});
}
});
});
您执行此操作的方式,将在发送请求后立即调用构造函数(在响应到达并填充数组之前),因此将使用空数组初始化自动完成。
答案 1 :(得分:1)
您的回复中有object
,但您需要array
才能使用自动转播功能。如果你可以访问你的后端,你必须在那里修复它,否则,你必须迭代你的AJAX'返回值并尝试将对象转换为数组。
Javascript不理解PHP associative
数组的概念,而JSON是JAVASCRIPT对象表示法,JSON也不理解它们。当你使用PHP json_encode
时,你必须确保你的数组是一个简单的数组(即没有强制数组键),否则你将得到一个JSON对象而不是数组。
$a = array("1"=>"one", "3"=>"three");
echo json_encode($a)
// {"1":"one", "3"=>"three"}
// doesn't work for jQuery.autocomplete
$b = array(array("id"=>"1", "label"=>"one"), array("id"=>"3","label"=>"three"));
echo json_encode($b);
// [{"id":1, "label":"one"}, {"id":3, "label":"three"}]
// works for jQuery.autocomplete
答案 2 :(得分:0)
你必须在ajax调用之后放置自动完成的构造函数 像这样:
$(document).ready(function(){
var arr=[];
$.ajax({
type:'POST',
url:'showtags.php',
success:function(res)
{
arr = $.parseJSON( res );
$('#tags').autocomplete({
source:arr
});
}
});
});
答案 3 :(得分:0)
您正在体验按值调用(或者至少是javascript使用它的方式)。
考虑以下示例:
var arr = [];
var x = {x: arr};
arr = [0,1];
console.log(x.x); // Outputs []
这里发生了什么?
创建对象x
时,arr
的引用将按值调用传递给对象构造函数。所以x.x
现在指向我们的初始空数组
现在,当您将arr
设置为另一个值时,您只需使用对新数组的引用覆盖对初始数组的引用。因此,arr
现在指向包含[0,1]
的新数组。
你可以通过使用apply来解决这个问题(假设res是一个数组)。
arr.push.apply(arr, $.parseJSON( res ));
arr
现在等于res
(因为arr之前是空的)
$(document).ready(function(){
var arr=[];
$.ajax({
type:'POST',
url:'showtags.php',
success:function(res)
{
arr = $.parseJSON( res );
}
});
$('#tags').autocomplete({
source:arr
});
});