当前位置:嗨网首页>书籍在线阅读

14-基于用户输入的数据动态创建建议列表

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.5.6 基于用户输入的数据动态创建建议列表

我们可以进一步改进这段程序,接受用户输入,然后向服务器发起Ajax请求来获得需要显示的建议列表。

此时书籍存放在一个MySQL数据库中(此例中名为 books 的表存放在名为 test 的数据库中)。其描述和内容如下:

CREATE DATABASE IF NOT EXISTS test; 
USE test; 
DROP TABLE IF EXISTS books; 
CREATE TABLE books ( 
 id int(10) unsigned NOT NULL auto_increment, 
 title varchar(100) NOT NULL, 
 PRIMARY KEY (id) 
); 
INSERT INTO books (id, title) VALUES 
 (1,"Web development with J2EE"), 
 (2,"Practical CSS & JavaScript"), 
 (3,"Practical Ruby on Rails"), 
 (4,"Introduction to HTML & CSS"), 
 (5,"jQuery UI");

发起一个Ajax请求,返回需要显示的建议列表:

 <script src = jquery.js></script> 
 <script src = jqueryui/js/jquery-ui-1.8.16.custom.min.js></script> 
 <link rel=stylesheet type=text/css 
     href=jqueryui/css/smoothness/jquery-ui-1.8.16.custom.css /> 
 <h3>Enter the name of the book:</h3> 
 <input id=book /> 
 <script> 
$("input#book").autocomplete ({ 
 source : function (request, callback) 
 { 
  var data = { term : request.term }; 
  $.ajax ({ 
   url : "action.php", 
   data : data, 
   complete : function (xhr, result) 
   { 
    if (result != "success") return; 
    var response = xhr.responseText; 
    var books = []; 
    $(response).filter ("li").each (function () 
    { 
     books.push ($(this).text ()); 
    }); 
    callback (books); 
   } 
  }); 
 } 
}); 
</script> 

用户输入的文本通过 request.term 获取,紧接着发起一个Ajax请求。请求完成后,对服务器的响应内容进行分析:将每个

  • 元素的内容放进 books 数组,然后通过 callback (books) 返回显示。

    用来处理Ajax请求的服务器端程序在文件action.php中,内容如下:

    <?
     $term = $_REQUEST["term"]; 
     $term = utf8_decode ($term); 
     $bd = mysql_connect ("localhost", "root", "pwd"); 
     $ret = mysql_select_db ("test", $bd); 
     $query = sprintf ( 
         "SELECT * FROM books WHERE title LIKE '%%%s%%'", 
         mysql_real_escape_string($term)); 
      // 执行查询    
      $result = mysql_query($query); 
      if ($result) 
      { 
       // 将查询结果发回给浏览器
       while ($row = mysql_fetch_assoc($result)) 
       { 
        echo ("<li>" . utf8_encode ($row["title"]) . "</li>"); 
       } 
       mysql_free_result($result); 
      }
      mysql_close ($bd); 
    ?>

    本例中将建议列表显示为纯文本,但我们也可以将图片插入列表项中,比如书籍相关的图片。这将在下一节中讨论。