ajax實現異步前后台交互,模擬百度搜索框智能提示


1.什么是異步?在傳統的網站項目中,填寫一堆數據,最后點擊提交,在點擊提交的這一刻才實現數據提交,前后台交互。在你點擊提交之前數據是沒有提交到后台的。這樣就會造成很大的不便。比如,我填了一大堆數據,結果告訴我填錯了,怎么辦?如果我一填錯就提示我填錯了,那該有多好啊,此時,異步提交就出現了,不用寫好所有數據一次全部提交,而是可以部分提交數據。

2.ajax實現異步提交的核心代碼就是一行,就是獲取瀏覽器內嵌的XMLHttpRequest對象,用該對象發送請求xmlHttp.open("GET",url,true),設置第三個參數為true,即腳本會在send(提交)方法之后繼續執行,而不用等待來自服務器的響應(異步)

3.具體實現請看實例實現類似於百度輸入框的效果,隨着輸入內容的改變,動態改變頁面提示信息,關鍵部位已有注釋:

頁面內容:

<body>
<div id="myDiv">
    <input type="text" size="50" id="keyword" onkeyup="getMoreContents()" onblur="clearData()"
           onfocus="getMoreContents()">
    <input type="button" value="百度一下" width="50">
    <!--緊貼在輸入框下面,動態顯示提示內容-->
    <div id="popDiv">
        <table id="content_table" bgcolor="#FFFAFA" border="0" cellpadding="0">
            <tbody id="content_table_body">

            </tbody>
        </table>
    </div>
</div>
</body>

首先,在輸入框中的內容發生變化的時候觸發onkeyup事件(鍵盤敲擊之后),進入getMoreContents()函數,進行后台交互,將相關聯的信息查出來顯示到輸入框的下方。代碼如下

var xmlHttp;

    function getMoreContents() {
        var contents = document.getElementById("keyword");
        if (contents.value == "") {
            clearData();
            return;
        }

        //該對象是實現異步提交的核心
        xmlHttp = createXmlHttp();

        //向服務器發送數據,escape函數是編碼函數,將內容編碼為ascll傳輸,以防中文亂碼
        var url = "search?keyword=" + escape(contents.value);

        //true表示腳本會在send方法之后繼續執行,而不用等待來自服務器的響應(異步)
        xmlHttp.open("GET", url, true)

        //xmlHttp綁定回調函數,在對象狀態發生改變時調用。有0-4五個狀態,一般只關心4(提交完成)
        //不能帶參數,不能帶括號
        xmlHttp.onreadystatechange = callBack;
        xmlHttp.send();
    }

其中有一個函數是createXmlHttp,這是用來獲取實現異步提交的對象,不同的瀏覽器有不同的獲取方法,代碼如下:

//獲得xmlHttp對象
    function createXmlHttp() {
        var xmlHttp;

        //一般的瀏覽器都支持這種方式來獲取該對象
        if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }

        //考慮瀏覽器的兼容性,ie就是他媽的事多
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            //雖然該瀏覽器支持ActiveXObject,但是不支持Microsoft.XMLHTTP
            if (!xmlHttp) {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
        }
        return xmlHttp;
    }

在獲取后台返回的數據之后要將數據顯示到頁面上,這就要求提交對象綁定一個回調函數(提交成功之后執行),代碼如下:

xmlHttp.onreadystatechange = callBack;


function callBack() {
        if (xmlHttp.readyState == 4) {

            //200表示響應成功,404表示未找到,500表示服務器內部錯誤
            if (xmlHttp.status == 200) {

                //交互成功,獲得響應數據
                var result = xmlHttp.responseText;

                //java返回的json數據和js的json數據有細微的區別:最外層少了小括號
                var json = eval("(" + result + ")");

                //獲得數據之后就可以動態展示數據了
                setContents(json);
            }
        }
    }

其中xmlHttp.readyState==4表示請求后台成功,至此,已經完成了關於異步提交的所有事情,后面的優化需要同學們自己完成。有需要的可以在評論區留下郵箱,有完整代碼奉上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM