Php jqueryui与数据库自动完成
我对JQuery还相当陌生,可能正试图实现一些对初学者来说可能更难的东西。但是,我尝试创建一个自动完成,将当前值发送到PHP脚本,然后返回必要的值 这是我的Javascript代码Php jqueryui与数据库自动完成,php,jquery,json,user-interface,autocomplete,Php,Jquery,Json,User Interface,Autocomplete,我对JQuery还相当陌生,可能正试图实现一些对初学者来说可能更难的东西。但是,我尝试创建一个自动完成,将当前值发送到PHP脚本,然后返回必要的值 这是我的Javascript代码 $("#login_name").autocomplete({ source: function(request, response) { $.ajax({ url: "http://www.myhost.com/myscript.php", dataType: "jsonp",
$("#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”的最后一半
这将产生以下输出
[{"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开发者工具,我得到一个错误“b为空”。一些建议:
dataType=“jsop”
?它似乎不是jsonp。我想你想要“json”李>
缓存:false
。这确保了请求始终被发出,并且永远不会从浏览器端缓存中得到满足警报()
。它被调用了吗李>
警报()上设置断点来验证参数的值李>
为什么要在URL中指定完整主机名?
昨晚,当我对页面和Ajax请求使用不同的主机名时,autocomplete出现了一个奇怪的情况,响应为null,即空字符串。当我修改它使用相同的主机名时,请求成功了。实际上,由于同源策略,ajax调用的URL中应该没有主机名李>
JSON结构是一个平面字符串,而需要一个数组或类似数组的结构。在使用map之前,请尝试对字符串进行json解码。是的,您确实需要json的标题信息
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
header("Cache-Control: no-cache, must-revalidate" );
header("Pragma: no-cache" );
header("Content-type: text/x-json");
并且在插头附近做了一个很好的点
在任何情况下,我认为你都不会像插件那样调用ajax
如果您实际上正在使用,您应该仔细阅读文档并运行基本版本。除了缺少标题数据之外,您的php还不错,终于找到了适合我需要的解决方案
$("#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;
}
});
我也有像你一样的问题。现在我把它修好了。问题是从服务器返回的json包含语法错误
In告诉我们,如果JSON中有错误,它将以静默方式失败。JSON必须与此处的JSON标准匹配
因为我的错误是JSON中的字符串只包含一个引号。但是JSON标准只接受用双引号括起来的字符串
例如,“你好世界”不是“你好世界”
修复后,可以将源设置为字符串URL。术语将位于“术语”查询字符串中。而且很有效 如果其他人需要它:
jQuery UI中的autocomplete文档指定要使用的querystring参数是“term”而不是“q”。。。至少现在是这样
E.g. http://www.myhost.com/myscript.php?term=someToSearchFor
简单的jQueryUI自动完成,适合那些可能需要它的人
//select data from the table
$search = $db->query('SELECT Title from torrents');
//then echo script tags and variables with php
<?php echo '<script type="text/javascript">
$(function() {
var availableTags = [';
foreach ($search as $k) {
echo '"'.$k['Title'].'",';
}
echo '];
$( "#tags" ).autocomplete({
minLength:2, //fires after typing two characters
source: availableTags
});
});
</script>';
?>
//从表中选择数据
$search=$db->query('SELECT Title from torrents');
//然后用php回显脚本标记和变量
您的html表单
<div id="search">
<form id="search-form">
<input id="tags" type="text" />
<input type="submit" value="Search" />
</form>
</div>
刚刚有了一个想法;“myscript.php”是否需要发送一个“JSON头”(如果存在这样的东西)…似乎参数没有通过?q=as documented???现在我已经删除了(isset($\u GET['q']),我在使用$(“#login\u name”)时在自动完成中得到了“未定义”选项。自动完成({源代码:“/ajax/login\u name.php”),数据类型:“json”,minLength:2,cache:false,formatItem:function(data){return data.user_login_name;},formatResult:function(data){return data.user_id;});顺便说一句,您需要添加json或jquery json插件来对其进行解码(据我所知)“或内容类型。但我认为json首选的内容类型是“application/json”或“text/javascript”。这就是jQuery1.4.2在发送json的ajax请求时所期望的,这也是被提议作为标准的。我添加了这些头的所有变体,但没有成功。我使用的是这个脚本的修改版本,如果我复制并粘贴代码,它会非常好地工作。现在尝试使用一个修改版本的不确定它是相同的问题。@bigstyle显示的JSON有双引号而不是单引号。
<div id="search">
<form id="search-form">
<input id="tags" type="text" />
<input type="submit" value="Search" />
</form>
</div>