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