ajax的post请求

AJAX五部曲

创建一个异步对象xmlhttp;

new XMLHttpRequest(); 
new ActiveXObject("Microsoft.XMLHTTP"); 

设置请求方式和请求地址;

xmlhttp.open("POST","01-ajax-get.php",true);

发送请求;

xmlhttp.send();

监听状态的变化;
通过onreadystatechange 事件来监听发送的状态变化,readyState状态为4时,请求结束。

处理返回的结果;
通过status来判断请求是否是成功,处理返回的结果

特别注意的是:如果需要像 HTML 表单那样 POST 数据,请使用setRequestHeader()来添加 HTTP 头。然后在send()方法中规定您希望发送的数据:

xmlhttp.open("POST","ajax_test.html",true); 
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
xmlhttp.send("fname=Henry&lname=Ford");

所以完善一下之前封装好的ajax代码:
即添加一个请求的类型参数type

function ajax(type,url,obj,timeout,success,error){
        //  0.将对象转换成字符串
        var str = objToString(obj); 

        //  1.创建一个异步对象xmlhttp;
        var xmlhttp,timer; 
        if (window.XMLHttpRequest){
          xmlhttp=new XMLHttpRequest(); 
        } else{// code for IE6, IE5 
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        }

        //  2.设置请求方式和请求地址; 
        // 判断请求的类型是POST还是GET
        if (type === 'GET') {
            xmlhttp.open(type,url+"?t=" +str,true);
        //  3.发送请求;
            xmlhttp.send();
        }else{
                xmlhttp.open(type,url,true);
                // 注意:在post请求中,必须在open和send之间添加HTTP请求头:setRequestHeader(header,value);
                xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
            //  3.发送请求;
                xmlhttp.send(str);

        }   

        //  4.监听状态的变化;
        xmlhttp.onreadystatechange = function(){
            clearInterval(timer);
            if (xmlhttp.readyState === 4) {
                if (xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status == 304) {
                    //  5.处理返回的结果;
                    success(xmlhttp);//成功后回调;
                }else{
                    error(xmlhttp);//失败后回调;
                }                   
            }
        }
    }

    //处理obj 
    function objToString(obj){
      obj.t = new Date().getTime();
      var res =[];
      for(var key in obj){
        //需要将key和value转成非中文的形式,因为url不能有中文。使用encodeURIComponent();
        res.push(encodeURIConponent(key) + " = " +encodeURIConponent(obj.[key]));
      }
      return res.join("&");
    }

    //判断外界是否传入了超时时间
    if(timeout){
        timer = setInterval(function(){
            xmlhttp.abort();//中断请求
            clearInterval(timer);
        },timeout);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值