我对JQuery相当陌生,也许想尝试一些对初学者来说可能有点难的事情。但是,我试图创建一个自动完成功能,该功能将当前值发送到PHP脚本,然后返回必要的值。
这是我的Javascript代码
$("#login_name").autocomplete({ source: function(request, response) { $.ajax({ url: "http://www.myhost.com/myscript.php", dataType: "jsonp", success: function(data) { alert(data); response($.map(data, function(item) { return { label: item.user_login_name, value: item.user_id } })) } }) }, minLength: 2 });
这是“ myscript.php”的后半部分
while($row = $Database->fetch(MYSQLI_ASSOC)) { foreach($row as $column=>$val) { $results[$i][$column] = $val; } $i++; } print json_encode($results);
产生以下输出
[{"user_id":"2","user_login_name":"Name1"},{"user_id":"3","user_login_name":"Name2"},{"user_id":"4","user_login_name":"Name3"},{"user_id":"5","user_login_name":"Name4"},{"user_id":"6","user_login_name":"Name5"},{"user_id":"7","user_login_name":"Name6"}]
谁能告诉我我要去哪里错了?开始变得很沮丧。输入框只是变成“白色”,没有显示任何选项。如果我指定一个值数组,该代码可以正常工作。
更新 我已将代码更改为,但仍然没有运气。
$("#login_name").autocomplete({ source: "/ajax/login_name.php", dataType: "json", minLength: 2, cache: false, select: function(event, ui) { alert(ui); } });
使用FireFox的Web Developer工具,出现错误“ b为null”。
终于找到了适合我需求的解决方案
$("#login_name").autocomplete({ source: function(request, response){ $.post("/ajax/login_name.php", {data:request.term}, function(data){ response($.map(data, function(item) { return { label: item.user_login_name, value: item.user_id } })) }, "json"); }, minLength: 2, dataType: "json", cache: false, focus: function(event, ui) { return false; }, select: function(event, ui) { this.value = ui.item.label; /* Do something with user_id */ return false; } });