比較簡單的jquery教程 Easy Ajax with jQuery 中文版全集第3/3頁
更新時間:2007年11月30日 13:24:41 作者:
客戶端代碼(html)
在使用jQuery之前,我們先處理一下html的頁面.這樣的話,當我們必須確定使用那些元素來獲取或者更新使用jQuery返回的數(shù)據(jù)時,我們就知道怎么做了.我們不需要很多東西:一個外圍div,一個消息段落以及一個有用戶名和消息文本框的form,還有一個submit按鈕.最后還需要加一個加載信息時的提示--我們可以使用jQuery輕松的移除它.下面就是代碼:
復制代碼 代碼如下:
<div id="wrapper">
<p id="messagewindow"><span id="loading">Loading...</span></p>
<form id="chatform">
Name: <input type="text" id="author" />
Message: <input type="text" id="msg" />
<input type="submit" value="ok" /><br />
</form>
</div>
客戶端代碼(jQuery)
現(xiàn)在,我們繼續(xù)看jQuery在客戶端的使用。首先,我們需要生命當前消息的時間戳為0,并且在服務器端調(diào)用函數(shù)來加載消息:
timestamp = 0;
updateMsg();
然后,我們將完成表單提交的代碼。jQuery允許我們?yōu)楸韱蔚膕ubmit事件添加一個事件鉤子,就像在html代碼中直接寫onSubmit事件的效果一樣,但是不需要動任何html代碼。下面是submit事件:
$("form#chatform").submit(function(){ /* Code */ });
這里我們用CSS選擇符語法來引用到一個id為'chatform'的表單元素,一旦我們進入表單提交的代碼,我們可以使用jQuery的$.post來發(fā)送一個POST請求.在$.post的調(diào)用中,我們可以使用表單元素的id來選擇它的值,就像我們先前演示的那樣.知道了這些,讓我們看一下我們的ajax調(diào)用:
$.post("backend.php",{ message: $("#msg").val(),
name: $("#author").val(), action: "postmsg", time: timestamp }, function(xml) {
注意這里傳過去的參數(shù)數(shù)組是以大括號括起來的.如果你有多個參數(shù)的話,可以簡單的以逗號分割,并且使用JSON格式,像上面演示的那樣.由還可以使用jquery的ajax函數(shù)發(fā)送一個get請求,會有一個json風格的響應,可以使用jQuery把反饋的文本轉(zhuǎn)換成更容易閱讀的形式.要記住,這種方式只有對get請求類型才起作用,對我們這里使用的post則無效.因此,我們這里將使用最簡單的XML.
現(xiàn)在,我們看一下XML響應.為代碼重用,我們在這里為處理xml創(chuàng)建一個函數(shù)并且調(diào)用它:
addMessages(xml);
我們將在后邊實現(xiàn)它,以便我們現(xiàn)在專注實現(xiàn)表單提交代碼.我們現(xiàn)在寫出來的代碼就是$.post需要的全部了,因此我們加個大括號以及一個返回false的提示(return false; ).這行將使標準瀏覽器提交表單錯誤代碼的時候失效.瀏覽器并不把請求發(fā)送到另一個頁面--因為我們已經(jīng)處理了事件提交,不需要由瀏覽器來處理了.這既是代碼的全部:
復制代碼 代碼如下:
$("form#chatform").submit(function(){
$.post("backend.php",{
message: $("#msg").val(),
name: $("#author").val(),
action: "postmsg",
time: timestamp
}, function(xml) {
addMessages(xml);
});
return false;
});
現(xiàn)在讓我們回頭看看addMessages()函數(shù),來處理xml響應信息.使用jQuery的DOM操作以及遍歷函數(shù)使它的實現(xiàn)變得很簡單. 記得我曾經(jīng)提到的狀態(tài)代碼么?現(xiàn)在我們該看看怎么處理它了:
if($("status",xml).text() == "2") return;
我還沒有提過jQuery的相關(guān)上下文.這里函數(shù)調(diào)用的xml告訴jQuery不要區(qū)在html文檔中找,而應在服務器端發(fā)送給我們的xml文件中.
這行代碼檢查狀態(tài)代碼為2,則表示完成了一次成功的請求但是沒有新信息添加到窗體中去.return關(guān)鍵字終止函數(shù)調(diào)用.然后我們設(shè)置為xml的時間戳設(shè)值.
timestamp = $("time",xml).text();
再次,我們從xml的time標簽獲得值.
現(xiàn)在,我們繼續(xù)看jQuery遍歷數(shù)組的函數(shù):each(); jQuery有一個遍歷數(shù)組的有趣方法.我們使用一個標準的選擇符聲明,并且each()函數(shù)傳遞一個參數(shù)--一個函數(shù)處理相匹配元素的每一個實例. 在我們的示例中,元素就是服務器端返回的每一個<message>標簽的實例.每個實例代表一條要顯示的消息.參數(shù)--實例的id被傳給函數(shù).我們可以使用jQuery的get()方法來獲取新內(nèi)容--其實就是<message>標簽的xml. 下面代碼展示我們?nèi)绾芜x擇它:
$("message",xml).each(function(id) {
message = $("message",xml).get(id);
我們?nèi)缓缶涂梢允褂胘Query的$函數(shù)來獲取message的值.既然我們得到了我們需要的所有數(shù)據(jù),我們就應該把它加到消息顯示區(qū)里面去.這個消息顯示窗體有一個叫做'messagewindow'的id,因此我們使用$("#messagewindow")來選擇到它并且使用prepend()來添加我們的數(shù)據(jù):
$("#messagewindow").prepend("<b>"+$("author",message).text()+
"</b>: "+$("text",message).text()+
"<br />");
就是這些了,把他們放在一起,現(xiàn)在我們的函數(shù)就是:
復制代碼 代碼如下:
function addMessages(xml) {
if($("status",xml).text() == "2") return;
timestamp = $("time",xml).text();
$("message",xml).each(function(id) {
message = $("message",xml).get(id);
$("#messagewindow").prepend("<b>"+$("author",message).text()+
"</b>: "+$("text",message).text()+
"<br />");
});
}
$.post("backend.php",{ time: timestamp }, function(xml) {
我上面提到,我們需要在這時移除我們的loading消息,因此,我們在這個span上調(diào)用remove函數(shù):
$("#loading").remove();
然后,我們在xml對象中收到xml響應,把它傳遞給我們的addMessages 函數(shù):
addMessages(xml);
最后我們調(diào)用javascript的setTimeOut()函數(shù),來間斷執(zhí)行代碼.這就是完整的代碼:
function updateMsg() {
$.post("backend.php",{ time: timestamp }, function(xml) {
$("#loading").remove();
addMessages(xml);
});
setTimeout('updateMsg()', 4000);
}
整合代碼
現(xiàn)在我們把所有的代碼整合到一起.代碼可以在這里下載( this downloadable zip file).不過,請看這里,我們加了一些html和css到我們的程序中:
復制代碼 代碼如下:
<html>
<head>
<title>Ajax with jQuery Example</title>
<script type="text/JavaScript" src="jquery.js"></script>
<script type="text/JavaScript">
$(document).ready(function(){
timestamp = 0;
updateMsg();
$("form#chatform").submit(function(){
$.post("backend.php",{
message: $("#msg").val(),
name: $("#author").val(),
action: "postmsg",
time: timestamp
}, function(xml) {
$("#msg").empty();
addMessages(xml);
});
return false;
});
});
function addMessages(xml) {
if($("status",xml).text() == "2") return;
timestamp = $("time",xml).text();
$("message",xml).each(function(id) {
message = $("message",xml).get(id);
$("#messagewindow").prepend("<b>"+$("author",message).text()+
"</b>: "+$("text",message).text()+
"<br />");
});
}
function updateMsg() {
$.post("backend.php",{ time: timestamp }, function(xml) {
$("#loading").remove();
addMessages(xml);
});
setTimeout('updateMsg()', 4000);
}
</script>
<style type="text/css">
#messagewindow {
height: 250px;
border: 1px solid;
padding: 5px;
overflow: auto;
}
#wrapper {
margin: auto;
width: 438px;
}
</style>
</head>
<body>
<div id="wrapper">
<p id="messagewindow"><span id="loading">Loading...</span></p>
<form id="chatform">
Name: <input type="text" id="author" />
Message: <input type="text" id="msg" />
<input type="submit" value="ok" /><br />
</form>
</div>
</body>
</html>
你看到了,僅僅使用22行javascript代碼,8行html以及大約50行php,我們就實現(xiàn)了一個完整的基于ajax的web聊天室應用程序.試一下吧,然后加入到你自己的網(wǎng)站上.創(chuàng)建你自己的ajax程序,使用這里的技術(shù),或者你有自己的好點子.用這里的代碼去做電信東西.如果你覺得使用xml很不爽,那你可以直接在你的應用程序中生成html,然后使用load來加載到客戶端.如果你想的話,可以試試用功能強大的xml標簽屬性以及jQuery的attr()函數(shù). 現(xiàn)在你應該已經(jīng)很驚訝于用jQuery實現(xiàn)ajax的簡單了吧!
[全文完]
相關(guān)文章
jquery實現(xiàn)checkbox全選全不選的簡單實例
本篇文章主要是對jquery實現(xiàn)checkbox全選全不選的簡單實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12javascript(基于jQuery)實現(xiàn)鼠標獲取選中的文字示例【測試可用】
這篇文章主要介紹了javascript(基于jQuery)實現(xiàn)鼠標獲取選中的文字,涉及jQuery響應鼠標事件及頁面元素屬性動態(tài)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-10-10jQuery擴展方法實現(xiàn)Form表單與Json互相轉(zhuǎn)換的實例代碼
本文通過實例代碼給大家介紹了jQuery擴展方法實現(xiàn)Form表單與Json互相轉(zhuǎn)換的相關(guān)知識,并給大家介紹了jquery兩種擴展方法,需要的朋友可以參考下2018-09-09jQuery contains過濾器實現(xiàn)精確匹配使用方法
contains 選擇器選取包含指定字符串的元素。該字符串可以是直接包含在元素中的文本,或者被包含于子元素中。經(jīng)常與其他元素/選擇器一起使用,來選擇指定的組中包含指定文本的元素2013-04-04jquery實現(xiàn)仿Flash的橫向滑動菜單效果代碼
這篇文章主要介紹了jquery實現(xiàn)仿Flash的橫向滑動菜單效果代碼,可實現(xiàn)滑塊跟隨鼠標滑動效果的功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09jquery中dom操作和事件的實例學習 仿yahoo郵箱登錄框的提示效果
最近把jquery中的dom操作和jquery中的事件和動畫的方法都大體測了一下。本來想細細的把每個方法都寫出來介紹下2011-11-11