Ajax 返回三种值 解例

来源:互联网 发布:淘宝卖家怎么回复差评 编辑:程序博客网 时间:2024/06/05 22:52

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,第二个是配置参数。

完整代码

view sourcePRint?
01Ajax = 
02function(){
03    function request(url,opt){
04        function fn(){}
05        var async   = opt.async !== false,
06            method  = opt.method    || 'GET',
07            type    = opt.type      || 'text',
08            encode  = opt.encode    || 'UTF-8',
09            data    = opt.data      || null,
10            success = opt.success   || fn,
11            failure = opt.failure   || fn;
12            method  = method.toUpperCase();
13        if(data && typeof data == 'object'){//对象转换成字符串键值对
14            data = _serialize(data);
15        }
16        if(method == 'GET' && data){
17            url += (url.indexOf('?') == -1 ? '?' : '&') + data;
18            data = null;
19        }   
20        var xhr = window.xmlhttpRequest ? new XMLHttpRequest() : newActiveXObject('Microsoft.XMLHTTP');
21        xhr.onreadystatechange = function(){
22            _onStateChange(xhr,type,success,failure);
23        };
24        xhr.open(method,url,async);
25        if(method == 'POST'){
26            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset='+ encode);
27        }
28        xhr.send(data);
29        return xhr; 
30    }
31    function _serialize(obj){
32        var a = [];
33        for(var k in obj){
34            var val = obj[k];
35            if(val.constructor == Array){
36                for(var i=0,len=val.length;i<len;i++){
37                    a.push(k + '=' + encodeURIComponent(val[i]));
38                }               
39            }else{
40                a.push(k + '=' + encodeURIComponent(val));
41            }               
42        }
43        return a.join('&');
44    }
45    function _onStateChange(xhr,type,success,failure){
46        if(xhr.readyState == 4){
47            var s = xhr.status, result;
48            if(s>= 200 && s < 300){
49                switch(type){
50                    case 'text':
51                        result = xhr.responseText;
52                        break;
53                    case 'json':
54                        result = function(str){
55                            return (new Function('return ' + str))();
56                        }(xhr.responseText);
57                        break;
58                    case 'xml':
59                        result = xhr.responseXML;
60                        break;
61                }
62                success(result);    
63            }else{
64                failure(xhr);
65            }
66        }else{}
67    }
68    return (function(){
69        var Ajax = {request:request}, types = ['text','json','xml'];
70        for(var i=0,len=types.length;i<len;i++){
71            Ajax[types[i]] = function(i){
72                return function(url,opt){
73                    opt = opt || {};
74                    opt.type = types[i];
75                    return request(url,opt);
76                };
77            }(i);
78        }
79        return Ajax;
80    })();
81}();
原创粉丝点击