2011-01-06 74 views
0

我正在尝试使用jquery自动完成进行文本输入。我想要的是当用户键入一个字母时,从指定的字母开始的结果将显示在xml源文件中。但我无法让它工作。由于我在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 
});  

回答

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].'|';  
    } 
} 
0

我是新的JQuery的自己,但它不应该是typeof(data)==“string”

+0

一般AJAX功能工作正常,我用同样的语法几个功能,并没有使问题 – 2011-01-06 16:14:36

+0

你确切地知道它失败了呢?你是否放弃了ALERT语句来遍历代码? – Robert 2011-01-06 16:18:41

+0

它说'数组'是undefined – 2011-01-06 17:46:47

0

为什么要抓取xml文件中的一封信?为什么不使用.html将字母附加到下面的div。如果你做一个自动完成id有一个mysql数据库,它将保存一个项目列表的自动完成和文本框每个keyup检查如果文本框内有一个字符串,如果它做了一个Ajax请求与jQuery的PHP文件,然后你去除在$获得搜索内容,那么你可以把它的PHP文件抓取结果像这样的字符串内,并在底部的JavaScript字符串连接到您的div wwith HTML

1

所以使用JSON :)

 
$("#names").autocomplete({ 
    source: function(request , response){ 
     $.ajax({ 
      type: 'GET', 
      url: 'name.php', 
      dataType: "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]); 


所以我完整的代码会是这样

 
$("#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 
});