標籤:argument safari success 注釋 pen tty mic 狀態 實現
本文將介紹如何使用js封裝一段代碼,實現jq的ajax功能,每一步代碼均有注釋便於理解
實現代碼
function ajax(){ //擷取ajax的相應值(請求類型,請求地址,同步或非同步,傳遞資料,接收資料類型,成功失敗函數等) var ajaxData = { type:arguments[0].type || "GET", url:arguments[0].url || "", async:arguments[0].async || "true", data:arguments[0].data || null, dataType:arguments[0].dataType || "text", contentType:arguments[0].contentType || "application/x-www-form-urlencoded", beforeSend:arguments[0].beforeSend || function(){}, success:arguments[0].success || function(){}, error:arguments[0].error || function(){} } ajaxData.beforeSend() var xhr = createxmlHttpRequest(); //建立 XMLHttpRequest 對象 xhr.responseType=ajaxData.dataType; //預期伺服器返回的資料類型 xhr.open(ajaxData.type,ajaxData.url,ajaxData.async); //規定請求的類型、URL 以及是否非同步處理請求 xhr.setRequestHeader("Content-Type",ajaxData.contentType); //發送資訊至伺服器時內容編碼類別型(向請求添加 HTTP 頭) xhr.send(convertData(ajaxData.data)); //將請求發送到伺服器 //當請求被發送到伺服器時,我們需要執行一些基於響應的任務。 //每當 readyState 改變時,就會觸發 onreadystatechange 事件。 //readyState 屬性存有 XMLHttpRequest 的狀態資訊。 xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if(xhr.status == 200){ ajaxData.success(xhr.response) }else{ ajaxData.error() } } }}//建立 XMLHttpRequest 對象function createxmlHttpRequest() { if (window.ActiveXObject) { // IE6, IE5 瀏覽器執行代碼 return new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼 return new XMLHttpRequest(); }}//解析傳入的對象function convertData(data){ if( typeof data === ‘object‘ ){ var convertResult = "" ; for(var c in data){ convertResult+= c + "=" + data[c] + "&"; } convertResult=convertResult.substring(0,convertResult.length-1) return convertResult; }else{ return data; }}調用方法
ajax({ type:"POST", url:"ajax.php", dataType:"json", data:{"val1":"abc","val2":123,"val3":"456"}, beforeSend:function(){ //some js code }, success:function(msg){ console.log(msg) }, error:function(){ console.log("error") } })
js實現jq的ajax