Heim  >  Artikel  >  php教程  >  Verwenden Sie die AJAX-Technologie, um Google Suggest-Effekte zu erstellen

Verwenden Sie die AJAX-Technologie, um Google Suggest-Effekte zu erstellen

黄舟
黄舟Original
2016-12-15 09:40:231135Durchsuche

建发实习面试时有提到这个问题,回来就考虑去实践一下,结果花了不少时间.主要是javascript在前台的表现问题,数据库结构设计等.网上有少数的几个dom教程,没有值得借鉴的地方,而<<征服Ajax web2.0开发技术详解>>中第16章 搜索提示(suggest)中那个例子实在是简陋(当然是说javascript表现部分),而且数据库用MSSQL,后台语言用JSP,和自己熟悉的格格不入(虽然都是以后要接触的),所以自己动手了.模仿效果:Google Suggest
*开发平台:Windows2003 IIS6.0 Access数据库
*工具:DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)
*测试平台:Firefox2.0,IE6.0,IE7.0
*演示地址:http://finish.3322.org/suggest/index.htm(短期有效,在本机上,可能访问不顺畅)
*:文件结构:
  index.htm:首页,展现效果
  ajax_result.asp:ajax调用后台返回结果文件
  result.asp:搜索结果文件,这个我并没有做,具体功能根据需求来写
  数据库(suggest.mdb):
    id:自动编号
    keyword:关键字
    seachtimes:被搜索次数
    matchnum:匹配的文章数目(关于这个方面想了蛮久,如何取得文章数呢,不能是搜索时动态产生,不然在偌大数据库中查询费时费力.那么必然是在后台某个时候去其他的数据库表中添加的,原来想把这方面也做了,但限于算法的不成熟和时间的限制.所以就用了随机数来替换.)
*开发过程遇到问题:
  1.CSS方面:遇到了IE双倍浮动边界Bug(float:left下的margin-left是设置的两倍,用display:inline消除)
  2.javascript方面:
    一个是那个全局变量j的上下界问题着实让我乱了一会,还好理清了思路
    按键事件的兼容性问题:IE的keyCode,其他浏览器的which事件
    onkeypress和onkeyup,onkeydown事件的区别:onkeypress只接受数字和字母,不接受系统按键(如上下
方向键)
    使用submit()方法时不能定义某个标签的id或name为submit,不然将提示缺少对象
    还有一些细节判断问题,也让我费了不少神
  3.html方面:
    如何让表单不记忆(在firefox下自动记忆会挡主ajax部分,而google中就没有这样的提示功能,所以去掉了表单记忆功能),只要在form中加一个autocomplete="off"
*补充:
  和google suggest还有一些差距,比如一直按着方向键问题和其他细节问题,这些都有待改进.
*效果图:
 

限于文章长度,只帖首页和js,其他的去附件下载:
草履虫--仿googlesuggest.rar
首页:index.htm


 


草履虫---简易Google Suggest
 
 


 
 


   
   
   
   

 



suggest.js view plaincopy to clipboardprint?
var j=-1;   
var temp_str;   
var $=function(node){   
    return document.getElementById(node);   
}   
var $$=function(node){   
    return document.getElementsByTagName(node);   
}   
function ajax_keyword(){   
    var xmlhttp;   
    try{   
        xmlhttp=new XMLHttpRequest();   
        }   
    Catch(e){   
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");   
        }   
    xmlhttp.onreadystatechange=function(){   
    if (xmlhttp.readyState==4){   
        if (xmlhttp.status==200){   
           var. data= xmlhttp.responseText ;   
            $("suggest").innerHTML=data;   
            j=-1;   
            }   
        }   
    }   
    xmlhttp.open("post", "ajax_result.asp", true);   
    xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');   
    xmlhttp.send("keyword="+escape($("keyword").value));   
}   
function keyupdeal(e){   
    var keyc;   
    if(window.event){   
        keyc=e.keyCode;   
        }   
    else if(e.which){   
        keyc=e.which;   
        }   
    if(keyc!=40 && keyc!=38){   
        ajax_keyword();   
        temp_str=$("keyword").value;   
    }   
    }   
  
function set_style(num){   
    for(var i=0;i<$$("li").length;i++){   
        var li_node =$$("li")[i];   
        li_node.className="";   
    }   
    if(j>=0 && j<$$("li").length){   
        var i_node=$$("li")[j];   
        $$("li")[j].className="select";   
        }   
    }   
function mo(nodevalue){   
    j=nodevalue;   
    set_style(j);   
}   
function form_submit(){   
    if(j>=0 && j<$$("li").length){   
        $$("input")[0].value =$$("li")[j].childNodes[0].nodeValue;   
        }   
    document.search.submit();   
}   
function hide_suggest(){   
    var nodes=document.body.childNodes   
    for(var i=0;i=$$("li").length){   
                j=-1;   
            }   
        }   
        if(j>=$$( "li").length){   
                j=-1;   
            }   
    }   
    if(keyc==38){   
        if(j>=0){   
            j --;           if(j<=-1){   
               j=$$("li").length;       else{   
            j=$$ ("li").length-1;   
        }   
    }   
    set_style(j);   
    if(j>=0 && j<$$("li").length){   
        $("keyword").value=$$("li")[j].childNodes[0].nodeValue;   
        }   
    else{   
        $("keyword").value= temp_str;   
        }   
    }   


以上就是用AJAX技术做Google Suggest效果, 更多相关文章请关注PHP中文网(www.php.cn)! 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn