Js和Json技术实现百度搜索提示功能

Js和Json技术实现百度搜索提示功能

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
         contentType="text/html; charset=UTF-8"
%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>获取后台提交来json对象,搜索提示</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
   <style type="text/css">

              #text{
                 padding-top:5px;
                 padding-bottom:5px;
                 padding-left:10px;
                 height: 200px;
                 width: 190px;
                 border: 2px  solid red;
                 position: relative;
              }

             #suggest{
               position: absolute;
               left: 10px;
             }

              #suggest,#suggest  div{

                   border:1px  solid  red;
                   height: 35px;
                   width: 160px;
                   z-index: 10000;
              }


              .show{
                 display: block;
              }
              .on{
                 display:none;
              }

            .col{
                background-color: blue;
            }


   </style>



  </head>

  <body>
      <div   id="text">
              <div> 
               <!-- 搜索框  -->
              <input  type="text"  name="name" id="name" onkeyup="soso(this.value,event)" />百度<br>
              </div>
              <!-- 表单提示框  ,默认隐藏 -->
              <div   id="suggest"  class="on" >
              </div>
      </div>       
                 <hr/>
                 <div  id="luo"></div><br>
                 <div  id="fei"></div>
  </body>
</html>


<script  type="text/javascript">





//把字符串解析成dom文档
function   parseXML(StringXML){
        var  dom;
         try {
                try {
                    //ie浏览器
                    dom=new  ActiveXObject("Microsoft.XMLDOM");
                    //开始解析
                    dom.loadXML(StringXML);
                } catch (e) {
                    //ie浏览器的其他版本
                    dom=new  ActiveXObject("Msxml9.DOMDocument");
                    dom.loadXML(StringXML);
                }
            } catch (e) {
                //非ie浏览器
                var     newParse=new DOMParser();
                //开始解析
                dom=newParse.parseFromString(StringXML,"text/xml");
            }


            return   dom;
}



    //侦听单击清除事件,清除提示div
    document.onclick=function(evt){
         //ie有docuement.all属性       
        var isExists=(document.all)?  true  :  false;

         //获取按键的值
        var  key;

         //触发事件对象
         var  obj;

        if(isExists){

            key=event.keyCode;
            obj=event.srcElement;
        }else{
            key=evt.which;
            obj=evt.target;
        }

        //alert('key=='+key);
        //alert('obj'+obj);
   //获取提示框所有子节点     
   var  arrays= document.getElementById("suggest").childNodes;
    //获取输入提示框
   var  name=document.getElementById("name");
   //遍历所有节点
   for(var  i=0;i<arrays.length;i++){
            //当单机不是此节点,就隐藏
           if(obj!=arrays[i]&&obj!=name){
               document.getElementById("suggest").style.display="none";
               document.getElementById("suggest").innerHTML="";
                   // document.getElementById("suggest").className="on";
                  //arrays[i].className="on";
           }

   }


    }


            //去空串
            String.prototype.trim=function (){
                  return  this.replace(/^\s+|\s+$/g, "");
            }


            //键盘onkeyup事件,发生异步调用
             function  soso(obj,evt){
                 //设置参数
                 var  url="${pageContext.request.contextPath }/SosoServlet.action";

                 var  data="name="+obj+"&item="+new Date();

                 var  XMLHttpRequest=createXMLHttpRequest();



                //判断输入框的值
               if(obj.length>=1){

                   //侦听按键
                   var   flag= (document.all) ?  true :  false;

                    var  key2;

                    if(flag){
                           key2=event.keyCode;   
                    }else{
                           key2=evt.which;
                    }

                   // alert(key2);

                   //判断这个onkeyup事件不是选提示的onkeyup

    //避免onkeyup事件冲突            if(key2!=40&&key2!=39&&key2!=38&&key2!=37&&key2!=13){


                 //注册回调函数
                 XMLHttpRequest.onreadystatechange=function(){

                 if(XMLHttpRequest.readyState==4){

                      if(XMLHttpRequest.status==200){

                         var  result   = XMLHttpRequest.responseText;

                        // alert(result);

                         var  jsonObj;

                         if(document.all){
                             //ie
                             jsonObj=eval('('+result+')');

                         }else{
                             //非ie
                             jsonObj=JSON.parse(result);
                         }

                         if(jsonObj.length>=1){ 

                         var  str='';      
                           //显示
                           document.getElementById("suggest").style.display="block";

                           document.getElementById("suggest").innerHTML='';

                           //循环json对象
                          for(var   i=0;i<jsonObj.length;i++){

                            // alert(jsonObj[i].name);
                            str=str+"<div>"+jsonObj[i].name+"</div>";


                         }
                        document.getElementById("suggest").innerHTML=str;


                        //获取提示框 div下面的所有的子节点
                        var   arrays=document.getElementById("suggest").childNodes;

                        index=-1;

                        //循环所有字节,给每个节点绑定单击事件
                        for(var i=0;i<arrays.length;i++){

                            //给每个div一个单击事件
                               arrays[i].onclick=function  (){
                                  // alert(this.innerHTML);
                                  document.getElementById("name").value=this.innerHTML;

                                  document.getElementById("suggest").style.display="none";

                                  document.getElementById("suggest").innerHTML="";


                                  index=-1; 
                               }

                            //给鼠标进入事件
                            arrays[i].onmouseover=function(){
                                 // alert('xxx'); background-color 
                                 this.style.backgroundColor="red";

                                 var   array=document.getElementById("suggest").childNodes;

                                 for(var  j=0;j<array.length;j++){
                                          if(this!=array[j]){
                                              array[j].style.backgroundColor="white";
                                          }else{
                                              index=j;
                                          }
                                 }


                            }

                            //当鼠标离开的时候
                            arrays[i].onmouseout=function  (){
                                this.style.backgroundColor="white";
                            }


                        }



                         } else{
                             //当后台返回的值小于1时
                             document.getElementById("suggest").style.display="none";
                             document.getElementById("suggest").innerHTML="";
                             index=-1;
                         }


                      }

                 }

                 }


                 XMLHttpRequest.open("post",url,true);
                 XMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                 XMLHttpRequest.send(data);

                   }//判断onkeyup事件


                 }//判断obj的长度    
          }


         //异步调用,创建xmlhttprequest
        function  createXMLHttpRequest(){
           var  XMLHttpR;

           try {

              if(window.XMLHttpRequest){
                       //非ie浏览器
                       XMLHttpR=new  XMLHttpRequest();
                       XMLHttpR.overrideMimeType("text/html;charset=UTF-8");
              }


        } catch (e) {
            //ie浏览器
            if(window.ActiveXObject){
                          //针对ie浏览器不同版本
                          try{
                                  XMLHttpR=new  ActiveXObject("Microsoft.XMLHTTP"); 
                        }catch(e){
                                 try {
                                     XMLHttpR=new  ActiveXOject("Msxml2.XMLHTTP");
                                } catch (e) {
                                    try {
                                        XMLHttpR=new ActiveXObject("Msxml3.XMLHTTP");
                                    } catch (e) {
                                        // TODO: handle exception
                                    }
                                } 
                        }
            }
        }

           return   XMLHttpR;
     }




        var num=-1;//默认提示div数组的下标

         //侦听键盘按键事件
         document.onkeyup=function(evt){
            //key键
            var  key;

             var  isExists=(document.all)?  true:  false;  

             //监听对象
             var  obj;

             if(isExists){
                //ie
                key=event.keyCode;
                obj=event.srcElement;

             }else{
                //非ie
                key=evt.which;
                obj=evt.target;
             }

            //alert(key);//下40  上38   左37  右39  回车13

            switch (key) {
                    case 40:
                        num++;
                         var array1=document.getElementById("suggest").childNodes;
                        //alert(index);
                        //alert();  
                        if(num>=array1.length){
                            num=0;
                        }
                         var  obj1=document.getElementById("suggest").childNodes[num];

                         obj1.style.backgroundColor="red";
                         //获取所有子节点

                         for(var i=0;i<array1.length;i++){
                             if(obj1!=array1[i]){

                                 array1[i].style.backgroundColor="white";
                             }
                         }

                        document.getElementById("fei").innerHTML=num;
                        break;

                    case 38:
                            num--;
                            var array1=document.getElementById("suggest").childNodes;
                            if(num<0){
                                num=array1.length-1;
                            }
                            var  obj2=document.getElementById("suggest").childNodes[num];
                            obj2.style.backgroundColor="red";
                            for(var  i=0;i<array1.length;i++){
                                  if(obj2!=array1[i]){
                                        array1[i].style.backgroundColor="white";
                                  }
                            }

                            document.getElementById("fei").innerHTML=num;
                            break;
                    case  13:
                           //回车以后给文本框赋值
                           document.getElementById("name").value=
                               document.getElementById("suggest").childNodes[num].innerHTML;

                           document.getElementById("suggest").style.display="none";
                           document.getElementById("suggest").innerHTML=""; 

                            num=-1;
                            break;
                    default:
                            break;
        }

         }




</script>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用AJAX+JSON技术实现新增用户功能的步骤: 1. 在前端页面中添加一个表单,用于输入用户信息,例如用户名、密码、邮箱等。 2. 在JavaScript中编写AJAX代码,通过POST请求将表单中的数据以JSON格式发送到后端的接口。 3. 在后端接口中解析JSON数据,将用户信息存储到数据库中。 4. 在后端接口返回一个JSON响应,表示新增用户成功或失败。 5. 在前端页面中根据后端返回的JSON响应,展示新增用户的结果。 下面是一个简单的示例代码: 前端页面: ```html <form id="user-form"> <input type="text" name="username" placeholder="用户名"> <input type="password" name="password" placeholder="密码"> <input type="email" name="email" placeholder="邮箱"> <button type="submit">提交</button> </form> <script> const form = document.getElementById('user-form'); form.addEventListener('submit', (event) => { event.preventDefault(); const data = new FormData(form); const xhr = new XMLHttpRequest(); xhr.open('POST', '/api/user'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = () => { const response = JSON.parse(xhr.responseText); // 根据响应展示结果 }; xhr.send(JSON.stringify(Object.fromEntries(data))); }); </script> ``` 后端接口: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/user', methods=['POST']) def create_user(): data = request.get_json() # 解析JSON数据,存储到数据库中 # ... return jsonify({'success': True}) ``` 注意:以上代码仅为示例,实际应用中需要根据具体情况进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值