在jquery自动完成中使用xml作为源

在jquery自动完成中使用xml作为源,jquery,xml,autocomplete,Jquery,Xml,Autocomplete,我正在尝试使用jquery自动完成文本输入。我想要的是,当用户键入字母时,将从xml源显示以指定字母开头的结果。但我不能让它工作。由于我是jquery新手,我不知道自己做错了什么。请帮忙:) 我还测试了php文件,它与xml一样工作良好 这是密码 $("#names").autocomplete({ source: function(request , response){ $.ajax({ type: 'GET', url:

我正在尝试使用jquery自动完成文本输入。我想要的是,当用户键入字母时,将从xml源显示以指定字母开头的结果。但我不能让它工作。由于我是jquery新手,我不知道自己做错了什么。请帮忙:)

我还测试了php文件,它与xml一样工作良好

这是密码

$("#names").autocomplete({
    source: function(request , response){
        $.ajax({
           type: 'GET',
            url: 'name.php',
            dataType: "xml",
            data: "letter="+request,
            success: function(data) {
                var xml;

                if (typeof data == "string") {
                    xml = new ActiveXObject("Microsoft.XMLDOM");
                    xml.async = false;
                    xml.loadXML(data);
                } else {
                    xml = data;
                }

                var array = [];
                var i = 0;

                $(xml).find('nameslist').each(function(){
                    array[i] = $(this).find("name").text();
                    i++;
                });
            }
        }); 
        response(array);
    },
    minLength: 1
});     

我自己是JQuery新手,但它不应该是类型(数据)=“字符串”

为什么要从xml文件中获取字母?为什么不使用.html将这些字母附加到下面的div中呢。如果你做一个自动完成id有一个mysql数据库,它会保存一个自动完成和文本框的项目列表,每次按键检查文本框是否有一个字符串,如果它确实使用jquery向你的php文件发出ajax请求,然后去掉$get searchword,那么你可以将它放在php文件中,像字符串一样抓取结果让javascript在底部用html将字符串附加到您的div ww中,因此使用JSON:)

$(“#名称”).autocomplete({ 来源:功能(请求、响应){ $.ajax({ 键入:“GET”, url:'name.php', 数据类型:“json”,
在“name.php”中,执行以下操作

<?php // do all your code here, get names etc.... // lets say your array with names looks like this // $names = array('Peter', 'John', 'Tom', 'Andy'); // serialize the array and send it to the browser echo json_encode($names); // edited here ?>
在你的.js文件中

var names = jQuery.parseJSON('["Peter","John","Tom","Andy"]'); // just to try, if this works, uncoment alert() below this //alert( names[3] ); var name=jQuery.parseJSON('[“彼得”、“约翰”、“汤姆”、“安迪”]'); //如果可以的话,请尝试在下面取消注释alert() //警报(名称[3]);
所以我的完整代码是这样的

$("#names").autocomplete({ source: function(request , response){ $.ajax({ type: 'GET', url: 'name.php', dataType: "json", data: "letter="+request, success: function(data) { var names = jQuery.parseJSON(data); } }); response(names); }, minLength: 1 }); $(“#名称”).autocomplete({ 来源:功能(请求、响应){ $.ajax({ 键入:“GET”, url:'name.php', 数据类型:“json”, 数据:“信函=”+请求, 成功:功能(数据){ var name=jQuery.parseJSON(数据); } }); 答复(姓名); }, 最小长度:1 });
下面是我为上述代码找到的解决方案

in.js

$("#names").autocomplete({
    source: function(request , response){
        $.ajax({
            type: 'GET',
            url: 'names.php',
            data: "letter="+$("#names").val(), //request doesn't work here, I don't know why
            success: function(data) {
                var explode = data.split("|");                      
                response(explode);
            }
        }); 
    }
});
在php文件中

if(isset($_GET['letter'])){
    $letter = $_GET['letter'];
    $sql = "select name from name_list where name like '".$letter."%'";
    $query = mysql_query($sql);

    while($result = mysql_fetch_row($query)){
        echo $result[0].'|';    
    }
}

一般来说,ajax函数工作正常,我在几个函数中使用了相同的语法,但没有造成任何问题。你确切知道它失败的地方吗?你是否在代码中插入了警告语句?我可以在我放学回家后发布一些代码,如果你需要更多的解释或帮助,请随意提问。如果你能ould发布一些关于div格式的示例,是的,我正在使用mysql来获得结果如果我在php中使用serialize函数,我会得到异常未捕获错误,如果我不这样做,那么names将返回null。此外,我认为json_encode会有字符集问题,我的结果将是iso-8859-9字符集。很抱歉,跳过“serialize”,JSON encode就足够了。我的错,我编辑了代码;-)你的进展情况如何?你还需要其他帮助吗?事实上,我将成功与响应等同起来,然后效果很好,但是我遇到了我预期的字符集问题,所以现在我使用的是Basistance的插件。我再次使用jquery UI autocomplete 1.8,我找到了一个非常简单的解决方案。我放了“|”在php中的每个结果和向js发送单个字符串之间,然后在js中,我用“|”分割数据,并将其分配给一个数组,它就工作了:)非常感谢您的努力
if(isset($_GET['letter'])){
    $letter = $_GET['letter'];
    $sql = "select name from name_list where name like '".$letter."%'";
    $query = mysql_query($sql);

    while($result = mysql_fetch_row($query)){
        echo $result[0].'|';    
    }
}