zoukankan      html  css  js  c++  java
  • 结果分类Ajax之三

    Ajax中的x指的是XML,早期的数据格式都喜欢用XML,然后一层层的解析。当然简单的也会返回HTML(或称HTML片段)。
    现在使用JSON格式的也很多。根据不同需求,给Ajax对象添加了三个实用方法:Ajax.text、Ajax.json、Ajax.xml。

    Ajax.text返回纯文本,即responseText

    Ajax.json返回json,即会将responseText解析成js对象

    Ajax.xml返回xml文档,即responseXML

    使用方式与Ajax.request相同,第一个参数是请求url,第二个是配置参数。

    完整代码

    Ajax = 
    function(){
    	function request(url,opt){
    		function fn(){}
    		var async   = opt.async !== false,
    			method  = opt.method 	|| 'GET',
    			type    = opt.type 		|| 'text',
    			encode  = opt.encode 	|| 'UTF-8',
    			data    = opt.data 		|| null,
    			success = opt.success 	|| fn,
    			failure = opt.failure 	|| fn;
    			method  = method.toUpperCase();
    		if(data && typeof data == 'object'){//对象转换成字符串键值对
    			data = _serialize(data);
    		}
    		if(method == 'GET' && data){
                url += (url.indexOf('?') == -1 ? '?' : '&') + data;
    			data = null;
            }	
    		var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    		xhr.onreadystatechange = function(){
    			_onStateChange(xhr,type,success,failure);
    		};
    		xhr.open(method,url,async);
    		if(method == 'POST'){
    			xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=' + encode);
    		}
    		xhr.send(data);
    		return xhr;	
    	}
    	function _serialize(obj){
    		var a = [];
    		for(var k in obj){
    			var val = obj[k];
    			if(val.constructor == Array){
    				for(var i=0,len=val.length;i<len;i++){
    					a.push(k + '=' + encodeURIComponent(val[i]));
    				}				
    			}else{
    				a.push(k + '=' + encodeURIComponent(val));
    			}				
    		}
    		return a.join('&');
    	}
    	function _onStateChange(xhr,type,success,failure){
    		if(xhr.readyState == 4){
    			var s = xhr.status, result;
    			if(s>= 200 && s < 300){
    				switch(type){
    					case 'text':
    						result = xhr.responseText;
    						break;
    					case 'json':
    						result = function(str){
    							return (new Function('return ' + str))();
    						}(xhr.responseText);
    						break;
    					case 'xml':
    						result = xhr.responseXML;
    						break;
    				}
    				success(result);	
    			}else{
    				failure(xhr);
    			}
    		}else{}
    	}
    	return (function(){
    		var Ajax = {request:request}, types = ['text','json','xml'];
    		for(var i=0,len=types.length;i<len;i++){
    			Ajax[types[i]] = function(i){
    				return function(url,opt){
    					opt = opt || {};
    					opt.type = types[i];
    					return request(url,opt);
    				};
    			}(i);
    		}
    		return Ajax;
    	})();
    }();
    

    相关:

    ajax_03.zip

    https://github.com/snandy/io

  • 相关阅读:
    max 获取硬件信息。
    创建文件夹 dos 找到外部链接
    max poly 合并 速度很快
    poly 查找因素脚本、
    下来要研究的东西。(文件之间的关系)
    上一个 有bug 线的形状节点的的判断,改
    mysql修改用户名密码
    ubuntu下ibus输入法的安装
    Android 版本与Kernel的对应关系
    You are attempting to build on a 32bit system Only 64bit build environments are supported beyond froyo/2.2
  • 原文地址:https://www.cnblogs.com/snandy/p/2026669.html
Copyright © 2011-2022 走看看