Class.create()分析
仿prototype創建類繼承
var Class = { create: function () { var c = function () { this.request.apply(this, arguments); } for (var i = 0, il = arguments.length, it; i < il; i++) { it = arguments[i]; if (it == null) continue; Object.extend(c.prototype, it); } return c; }};Object.extend = function (tObj, sObj) { for (var o in sObj) { tObj[o] = sObj[o]; } return tObj;};ajax定義:ZIP_Ajax=Class.create();
其中create方法返回的是一個構造函數request,這里相當于var ZIP_Ajax= function(){ this.request.apply(this, arguments); }; 用對象冒充的方式在函數內部執行了一次構造的過程,相當于把構造函數任務交給了request方法,這里的this.request是ZIP_Ajax的實例的方法,而this指向的就是ZIP_Ajax的實例,apply后面的this指向的是ZIP_Ajax,最后根據new關鍵字將this才真正指向ZIP_Ajax類。有了類ZIP_Ajax的定義,接下來就可以定義其方法:
XMLHttpRequest詳解:
XMLHttpRequest不是一項技術而是一個內置于主流瀏覽器內的一個可以完全訪問http協議的對象。傳統的http請求大部分都是基于form提交請求http,然后返回一個form。XMLHttpRequest支持同步請求的同時最大的優點就是支持異步傳輸接受數據,新建一個ajax請求實際就是實例化一個XMLHttpRequest對象。簡單介紹一下主要事件及方法:
readystatechange事件:
當XMLHttpRequest發送一個http請求之后就會激發一個readystatechange事件,事件返回有五個值,0,1,2分別代表創建XMLHttpRequest、初始化完成XMLHttpRequest、發送了請求,3代表響應沒結束(即只接收到響應頭數據)4才是真正獲得完整響應。
返回的status狀態表示服務器返回的狀態碼:
常用的有200表示成功返回數據,301永久重定向,302為臨時重定向(不安全)304讀取的緩存數據400表示請求出現語法錯誤,403表示服務器拒絕請求,404表示請求網頁資源不存在,405找不到指定位置服務器,408表示請求超時,500服務器內部錯誤,505表示服務器不支持請求的http協議版本。
200-300表示成功,300-400表示重定向,400-500表示請求內容或者格式或者請求體過大導致錯誤,500+表示服務器內部錯誤
open方法:
open接收三個參數分別是請求類型(get,post,head等)、url、同步或者異步
send方法:
當請求就緒后會觸發send方法,發送的內容就是請求的數據(如果是get請求則參數為null;
請求成功之后會執行success自定義方法,其參數為返回數據;
ajax跨域:
什么是跨域?
如果兩個站點www.a.com想向www.b.com請求數據就出現了因為域名不一致導致的跨域問題。即使是域名相同,如果端口不同的話也是會存在跨域問題(這種原因js是只能袖手旁觀了)。判斷是否跨域僅僅是通過window.location.protocol+window.location.host來判斷例如http://www.baidu.com.
新聞熱點
疑難解答
圖片精選