一直以來Aidec都是使用jquery來編寫前端的,但自從有天看到angularjs後(那陣子超紅的),便考慮學習一下這個由google開發的框架。但個人覺得他的學習曲線跟jquery比起來難度是比較高的,所以花了大約幾週才將它的基本用法搞懂,但是腦袋卻不知道這些功能要應用在什麼地方……(可能被jQuery荼毒太深),再加上學完後不久又出現facebook的react 甚至還有angularjs2.0 !! 這讓我深深覺得前端框架變化太快了,根本是一個還沒學好就又出新的了…… 因此決定不追隨流行框架,讓自己返樸歸真改去學原生javascript (打好基本功),說不定以後學框架就容易多了
Native Javascript Ajax vs jQuery Ajax
讓我們來比較一下原生ajax與jQuery ajax之間的差異吧!
jQuery Ajax
一般ajax
<script>
$.ajax({
type: 'POST',
url: "path/to/api",
data: "banana=yellow",
success: function (data) {
alert("Success: " + data);
},
});
</script>post
以post形式傳遞ajax
$.post( "ajax/test.html", function( data ) {
$( ".result" ).html( data );
});get
以get的形式傳遞ajax
$.get( "ajax/test.html", function( data ) {
$( ".result" ).html( data );
alert( "Load was performed." );
});load
以POST形式傳遞到處理頁面,並回傳至指定的selector
(1).
$( "#a" ).load( "action.php" , somefunction );
function somefunction(){
// code
}
(2).
$( "#a" ).load( "action.php" , {name:value} );Native Ajax
get
var r = new XMLHttpRequest();
r.open("GET", "path/to/api", true);
r.onreadystatechange = function () {
if (r.readyState != 4 || r.status != 200) return;
alert("Success: " + r.responseText);
};
r.send("banana=yellow");post
var r = new XMLHttpRequest();
r.open("POST", "path/to/api", true);
r.onreadystatechange = function () {
if (r.readyState != 4 || r.status != 200) return;
alert("Success: " + r.responseText);
};
r.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
r.send("banana=yellow");優缺點比較
| jQuery | Native js | |
| 效能 (比較數據) | 較差 | 較好 |
| 兼容性 | 已處理好 | 要自行處理 |
| 代碼長度 | 差不多 | |
| 傳遞的參數 | array,object,string.... | string |
綜合以上優缺點,可以得知原生js似乎比較麻煩,唯一的優點就是"快"。
但是我們也可以自己動手做一個解決上面的問題...以下是Aidec整理好的原生ajax js 有興趣的可以看看 (當然還是有不足的地方)
原生ajax js
var Ajax = {
param: function (object) {
var encodedString = '';
for (var prop in object) {
if (object.hasOwnProperty(prop)) {
if (encodedString.length > 0) {
encodedString += '&';
}
encodedString += encodeURI(prop + '=' + object[prop]);
}
}
return encodedString;
},
xhr : null,
request : function (url,method, data,success,failure){
if (!this.xhr){
this.xhr = window.ActiveX ? new ActiveXObject("Microsoft.XMLHTTP"): new XMLHttpRequest();
}
var self = this.xhr;
self.onreadystatechange = function () {
if (self.readyState === 4 && self.status === 200){
//var response = JSON.parse(self.responseText);
var response = self.responseText;
success(response);
}else if (self.readyState === 4) {
console.log('error');
}
};
this.xhr.open(method,url,true);
if(method=='POST'){
this.xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
if(typeof data === 'object'){
data=this.param(data);
}else{
data=encodeURI(data);
}
this.xhr.send(data);
}else{
this.xhr.send();
}
},
};使用方法
var myName='aidec';
var myAge='24';
/*
傳遞參數的方式 可以使用方式1或方式2都可以
*/
//傳遞的參數方式1
var data={name:myName,
age:myAge
};
//傳遞的參數方式2
var data="name="+myName+"&age="+myAge;
//使用原生ajax
Ajax.request("something.php","POST",data,function(r){
//成功回傳
console.log(r);
});說明
Ajax.request(處理的頁面,傳遞的形式(POST/GET),傳遞的參數, 成功回調);
後記
今天的正文就到這邊啦~~ 改天再來寫其它框架的文章。
接下來就是我之前發生的小蠢事,那就是開頭的時候說到我覺得前端框架太多太雜有些又太肥,因此當時想找一個簡單輕量化的框架來用...
後來就找到了這個vanilla-js 起初看它的介紹說各家知名大網站都有用它的框架時,我就很納悶(竟然我沒聽過!!!)。後來又看到它寫說它的速度是其它框架的十幾倍快,我整個人當下的反應就是我跟外界脫離成這樣了嗎??
後來仔細瞧瞧它的code怎麼跟原生javascript那麼像...後來發現它真的是原生js,原來它是作者故意在嘲諷用框架的人...
但在我看來,它根本是在欺騙我這個英文不好的人啊~~~~
文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)
原文連結:
https://blog.aidec.tw/post/native-javascript-ajax
若有業務合作需求,可寫信至: [email protected]
創業、網站經營相關內容未來將發布在 小易創業筆記