완전한 ajax 패키지

4186 단어 JavaScriptAjax
<>에서 발췌
XML:모든 브 라 우 저 는 네 이 티 브 XML 문서 처 리 를 지원 하 며,자동 으로 사용 가능 한 DOM 문서 로 변환 합 니 다.
HTML:XML 문서 와 의 차 이 는 보통 일반 텍스트 문자열 로 존재 하 며 HTML 세 션 을 저장 하 는 것 입 니 다.
Javscript/JSon:이것 은 두 가지 형식 인 원시 실행 가능 한 javascript 코드 와 JSon(javascript object Notation,Javascript 대상 표시)형식 을 포함한다.
HTTP 응답 데 이 터 를 가 져 오 는 중점 은 XML HTTP Request 대상 의 두 속성 입 니 다.
responseXML:서버 가 XML 문 서 를 되 돌려 준다 면 이 속성 은 미리 처 리 된 DOM 문서 의 인용 을 포함 하고 XML 문서 의 표현 입 니 다.서버 에서 만 그 내용 의 첫 번 째 부분(content header)을'content-
type:text/xml"또는 XML 과 유사 한 데이터 형식 일 때 만 유효 합 니 다.
responseText:이 속성 은 서버 가 되 돌아 오 는 원본 텍스트 데이터 의 인용 을 포함 합 니 다.HTML 과 자바 script 형식의 데 이 터 는 모두 이 방법 에 의존 하여 얻 을 수 있 습 니 다.

/**
	*    :
	*1、      :      ,             。    200-300         
	*2、     :'Not Modified(   )'   ,      304。            
	*                     ,     。      ,              
	*3、       :        Ajax    ,   web   ,       ,  
	*                          。              ,     
	*4、Safari      :            ,Safari        'undefined'
	*/
if(typeof XMLHttpRequest == 'undefined')
 XMLHttpRequest = function(){
  return new ActiveObject(navigator.userAgent.indexOf("MSIE 5")>=0?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP");
 };
function ajax(options){
	//  Ajax        
	//              ,       
	options={
		//HTTP    
		type:options.type||"POST",
		//   URL
		url:options.url || "",
		//       
		timeout:options.timeout ||5000,
		//    、     (             )      
		onComplete:options.onComplete || function(){},
		onFail:options.onFail || function(){},
		onSuccess:options.onSuccess || function(){},
		//            ,                       
		data:options.data || ""
	};
	//      
	//var xml = new XMLHttpRequest();
	var xml=createXMLHttpRequest();
	
	//       
	xml.open(options.type,options.url,true);
	
	//      5 ,     
	var timeoutLength=options.timeout;
	
	//          
	var requestDone = false;
	
	//     5        ,      (        )
	setTimeout(function(){
		requestDone=true;
	},timeoutLength);
	
	//         
	xml.onreadystatuschange = function(){
		//    ,        ,         
		if(xml.readyState == 4 && !requestDone){
			//        
			if(httpSuccess(xml)){
				//                    
				options.onSuccess(httpData(xml,options.type));
				
				//       ,        
			}else{
				options.onFail();
			};
			
			//        
			options.onComplete();
			//      ,    
			xml=null;
			
		};
	};
	
	//         
	xml.send();
	
	//  HTTP      
	function httpSuccess(r){
		try{
			//          ,          ,    
			return !r.status&&location.protocol=='file:'||
			//  200 300         
			(r.status>=200&& r.status<300)||
			//         
			r.status==304||
			//Safari            
			navigator.userAgent.indexOf('Safari')>=0&&typeof r.status =='undefined';
			
		}catch(e){
			//       ,         
			return false;
		}
	};
	
	// HTTP         
	//     :  XMLHttpRequest         ----             
	//      :xml,script,text html --   '',  content-type     
	function httpData(r,type){
		//   content-type   
		var ct = r.getResponseHeader("content-type");
		
		//          ,          XML  
		var data= !type && ct && ct.indexOf("xml")>=0;
		
		//  ,  XML    ,        
		data = type=="xml" || data?r.resonpseXML:r.responseText;
		
		//      "script",  javascript        
		if(type=="script"){
			eval.call(window,data);
		};
		
		//      (  XML         )
		return data;
	};
}

좋은 웹페이지 즐겨찾기