zoukankan      html  css  js  c++  java
  • 原生封装ajax方法

    实例:
     ajax({
                type:'get',
                // url:'http://tom.com/jsonp.php',
                url:'http://localhost/cross/data.php',
                dataType:'jsonp',
                data:{username:'zhangsan',password:'123'},
                jsonp:'cb',
                jsonpCallback:'abc',
                success:function(data){
                    console.log(data.username,data.password);
                }
            });
    
    
    




    function
    ajax(obj){ var defaults = { type : 'get', async : true, url : '#', dataType : 'text', jsonp : 'callback', data : {}, success:function(data){console.log(data);} } for(var key in obj){ defaults[key] = obj[key]; } if(defaults.dataType == 'jsonp'){ ajax4Jsonp(defaults); }else{ ajax4Json(defaults); } } function ajax4Json(defaults){ // 1、创建XMLHttpRequest对象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject('Microsoft.XMLHTTP'); } // 把对象形式的参数转化为字符串形式的参数 /* {username:'zhangsan','password':123} 转换为 username=zhangsan&password=123 */ var param = ''; for(var attr in defaults.data){ param += attr + '=' + defaults.data[attr] + '&'; } if(param){ param = param.substring(0,param.length - 1); } // 处理get请求参数并且处理中文乱码问题 if(defaults.type == 'get'){ defaults.url += '?' + encodeURI(param); } // 2、准备发送(设置发送的参数) xhr.open(defaults.type,defaults.url,defaults.async); // 处理post请求参数并且设置请求头信息(必须设置) var data = null; if(defaults.type == 'post'){ data = param; xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); } // 3、执行发送动作 xhr.send(data); // 处理同步请求,不会调用回调函数 if(!defaults.async){ if(defaults.dataType == 'json'){ return JSON.parse(xhr.responseText); }else{ return xhr.responseText; } } // 4、指定回调函数(处理服务器响应数据) xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ var data = xhr.responseText; if(defaults.dataType == 'json'){ // data = eval("("+ data +")"); data = JSON.parse(data); } defaults.success(data); } } } } function ajax4Jsonp(defaults){ // 这里是默认的回调函数名称 // expando: "jQuery" + ( version + Math.random() ).replace( /D/g, "" ), var cbName = 'jQuery' + ('1.11.1' + Math.random()).replace(/D/g,"") + '_' + (new Date().getTime()); if(defaults.jsonpCallback){ cbName = defaults.jsonpCallback; } // 这里就是回调函数,调用方式:服务器响应内容来调用 // 向window对象中添加了一个方法,方法名称是变量cbName的值 window[cbName] = function(data){ defaults.success(data);//这里success的data是实参 } var param = ''; for(var attr in defaults.data){ param += attr + '=' + defaults.data[attr] + '&'; } if(param){ param = param.substring(0,param.length-1); param = '&' + param; } var script = document.createElement('script'); script.src = defaults.url + '?' + defaults.jsonp + '=' + cbName + param; var head = document.getElementsByTagName('head')[0]; head.appendChild(script); }
  • 相关阅读:
    编程语言扮演的3个角色,它连接了机器、开发者以及团队!
    20行代码爬取王者荣耀全英雄皮肤!让你享受白嫖的快乐!
    3分钟教会你如何发布Qt程序!高级编程界面开发也是如此的简单!
    C 语言实现一个简单的 web 服务器!了解 Socket 通讯工作原理!
    log4j
    解决MySQL 一闪而过的情况
    subversion和客户端的应用
    Map集合
    代码块执行顺序。
    ArrayList-VS-LinkedList
  • 原文地址:https://www.cnblogs.com/lin-dong/p/6730726.html
Copyright © 2011-2022 走看看