近日,总在纠结不懂Ajax原理,导致用JQuery做Ajax的时候,总是会碰到各种诡异的问题。身边的朋友也是一问三不知!
正所谓,我不入地狱,谁入地狱。我不学习,等特么谁学习。。
so~~看了1星期的Ajax历史、由来、原理等。。自己写了个通用源生javascript函数,希望能给大家一些启迪。
Over,小二,上码!
各位加油,理解万岁。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
function ajax(options){
options = {
type : options.type || "POST",
url : options.url || "www.XXX.com/XXX.php?",
timeout : options.timeout || 5000,
onComplete : options.onComplete || function(){alert(请求成功)}, onError : options.onError || function(){alert(请求失败)}, onSuccess : options.onSuccess || function(){alert(请求完成)},
date : options.date || " " }
var xml = new XMLHttpRequest();
xml.open(options.type,options.URL,ture);
var requestDone = false;
setTimeout(function(){ requestDone = true; },options.timeout);
xml.onreadystatechange = function(){
if(xml.readyState == 4 && !requestDone){
if(httpSuccess(xml)){
options.onSuccess(httpDate(xml,Date,options.type)); }else{
options.onError(); }
options.onComplete();
xml = null; } }
xml.send();
function httpSuccess(r){ try{
return !r.status && location.protocolo = "file :" ||
(r.status > 200 && r.statys < 300) ||
r.statys == 304 ||
navigator.userAgent.indexof("Safiri") >= 0 && typeof r.status == "undefind"; }catch(e){}
return false; }
function httpDate(r,type){
var ct = r.getResponseHeader("content-type");
var date = !type && ct && ct.indexof("xml") >= 0;
date = type == "xml" || date ? r.resposeXML : r.resposeText;
if(type == "script"){ eval.call(window,date); }
return date; } }
|