jQuery這個JavaScript的Framework對於AJAX的支援非常地多。$.ajax()只是其中最通用的一項。當然還有許多其它的函式,這個網頁:jQuery 参考手冊 - Ajax,都有詳盡的介紹。
這一次,一樣是用jQuery來實現AJAX的技術,但不再用$.ajax()函式,而改用其它函式來搭配組合;後端的Web Server改成另一套Embedded Linux的GoAhead。
在程式碼的主體上,就不再重寫,直接把差異的部份給呈現出來。
首先,我在<body>主體前面,增加一個JavaScript函式,它能夠呈現當時的時間,格式如下:20140804 (MON) 15:09:36
var objCurrentTime = function() { var Ret = new Date(); var obj = { year: Ret.getFullYear(), month: function() { var tmp = Ret.getMonth() + 1; return (tmp < 10)? ("0" + tmp): tmp; }, date: function() { var tmp = Ret.getDate(); return (tmp < 10)? ("0" + tmp): tmp; }, hour: function() { var tmp = Ret.getHours(); return (tmp < 10)? ("0" + tmp): tmp; }, minute: function() { var tmp = Ret.getMinutes(); return (tmp < 10)? ("0" + tmp): tmp; }, sec: function() { var tmp = Ret.getSeconds(); return (tmp < 10)? ("0" + tmp): tmp; }, day: function() { var tmp = Ret.getDay(); var week = ""; switch (tmp) { case 0: week = "SUN"; break; case 1: week = "MON"; break; case 2: week = "TUE"; break; case 3: week = "WED"; break; case 4: week = "THUR"; break; case 5: week = "FRI"; break; case 6: week = "SAT"; break; default: break; } return week; }, Result: function() { return (this.year + this.month() + this.date() + " (" + this.day() + ") " + this.hour() + ":" + this.minute() + ":" + obj.sec()); } } return obj.Result(); }再來,我再加一個Delay Time的Function (但事後證明,這個Function實在是沒啥用....>"<),目的是為了瞭解AJAX各個階段的先後順序:
function Delay() { var i = -1, j = -1, k = -1; for (i = 0; i ++; i < 10000) for (j = 0; j++; j < 10000) for (k = 0; k++; k < 10000) return; }在網頁的主體部份,從原本的 <div id="ajax-ServerBack"></div> 置換成以下程式碼,其餘不變:
<div id="ajax-send"></div> <div id="ajax-start"></div> <div id="ajax-complete"></div> <div id="ajax-stop"></div> <div id="ajax-success"></div> <div id="ajax-error"></div>最後,則是jQuery的程序碼:
$(window.document).ready(function() { $("#AjaxTest").click(function() { $.ajaxSetup({ cache: true, //context: , timeout: 10000, global: true, contentType: "application/x-www-form-urlencoded", async: true, processData: true, ifModified: false, //jsonp: , //username: "admin", //password: "admin", scriptCharset: "utf-8", traditional: true }); $.post(g_strUri() + "/goform/formAjaxTesting", $("#jQueryAjax").serialize(), function(data, status, xhr) { alert(xhr.responseText); return; }, "text"); $("#ajax-send").ajaxSend(function(event, xhr, ajaxOptions) { $(this).text(objCurrentTime() + "AJAX request SEND. "); Delay(); return; }); $("#ajax-start").ajaxStart(function() { $(this).text(objCurrentTime() + "AJAX request START. "); Delay(); return; }); $("#ajax-complete").ajaxComplete(function(event, xhr, ajaxOptions) { $(this).text(objCurrentTime() + "AJAX request COMPLETE. "); Delay(); return; }); $("#ajax-stop").ajaxStop(function() { $(this).text(objCurrentTime() + "AJAX request STOP. "); Delay(); return; }); $("#ajax-success").ajaxSuccess(function(event, xhr, ajaxOptions) { //$(this).text(objCurrentTime() + " " + xhr.responseText); $(this).text(objCurrentTime() + "AJAX request SUCCESS. "); Delay(); return; }); $("#ajax-error").ajaxError(function(event, xhr, ajaxOptions, thrownError) { $(this).text(objCurrentTime() + " " + xhr.status + ": An error has occured making the request!! \n"); Delay(); return; }); return; }); return; });在這個範例裡,我把之前用的$.ajax()置換成$.ajaxSetup()和$.post()。前者用來設定一些AJAX的預設值;後者則是用HTTP POST方法來傳遞。
除此之外,jQuery在AJAX部份還提供了許多有用的函式;在這個範例中用上了ajaxSend()、ajaxStart()、ajaxComplete()、ajaxStop()、ajaxSuccess()和ajaxError()。原本的期望值是能夠在相對應的<DIV>區塊中顯示出來,但實際執行的結果則是----時間都是一樣地!!
但這不打緊,我們還是可以從書中得知AJAX的執行順序:
1. ajaxStart();
2. ajaxSend();
3. ajaxSuccess() / ajaxError();
4. ajaxComplete();
5. ajaxStop();
最後,再附上GoAhead Web Server端的程式碼:
int formAjaxTesting(webs_t wp, char_t *path, char_t *query) { int nBytesSent = 0; char_t *pStrVal = NULL; pStrVal = websGetVar(wp, T("nmUsername"), T("")); if (pStrVal != NULL) printf("%s (%d): %s \n", __FUNCTION__, __LINE__, pStrVal); pStrVal = websGetVar(wp, T("nmPassword"), T("")); if (pStrVal != NULL) printf("%s (%d): %s \n", __FUNCTION__, __LINE__, pStrVal); websResponse(wp, 200, "Hello!! World!! ", NULL); return nBytesSent; }在Google資料的過程中,也察覺許多不足之處,像是DTD、JSON、JSONP、XML、SOAP等等,都是將來值得花時間研究的方向。
School Teach Yourself
這個對岸做的教學網頁有非常豐富的資源;除此之外,也找到一些不錯的心得部落格,但這些畢竟是別人的文章,也不可能轉PO到這邊。
這篇文章只是個註記自己的學習概要....其餘不足之處,工作上有遇到的話再記下來吧!!
沒有留言:
張貼留言