zoukankan      html  css  js  c++  java
  • 原生ajax提交php后台接收不到问题

    var xmlHttp; 
        if (window.ActiveXObject) { 
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
        } else if (window.XMLHttpRequest) { 
        xmlHttp=new XMLHttpRequest(); 
        }
    
    function getAppCaptcha(cdata){
                if (isCaptcha) {return}
                    isCaptcha = true;
                 xmlHttp.open("POST",aaa.php'); 
            xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
            xmlHttp.send(disposeData(cdata)); 
            xmlHttp.onreadystatechange = function(data) {
                if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) { 
                var sdata = JSON.parse(data.currentTarget.response); 
                    if (sdata.error_code == 0) {
                        //验证成功
                        //干点什么
                        isClick = false;
                    }else if(sdata.error_code == 1048){//超过四次
                        isClick = true;
                        document.querySelector('.pop_click_box').style.display = 'block'
                    }else{
                        //验证失败
                        tipfun(sdata.error_msg);
                    }
                } else {
                    isClick = false;
                }
            } 
        }

    上面代码由于PHP做了ajax校验需要

    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
    ---------------------------------------------------------------------------------------

    PHP判断ajax请求的原理:

    在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $.get, or $.post方法请求网页内容时,它会向服务器传递一个HTTP_X_REQUESTED_WITH的参数,php中就是在header一层判断是否是ajax请求,对应的根据$_SERVER['HTTP_X_REQUESTED_WITH']判断。

    注意:

      • 一般情况下$_SERVER['HTTP_X_REQUESTED_WITH']默认是XMLHttpRequest
      • $_SERVER['HTTP_X_REQUESTED_WITH']也可以自定义创建的,使用XMLHttpRequest.setRequestHeader(name,value);
    -------------------------------------------------------------------
    提交的数据需要disposeData方法来处理成对应字符串才可以
    //传参封装
        function disposeData(data){
            var strData = '',num = 0;
            for(var key in data){
                if(num == 0){
                    strData = key + '=' + data[key];
                }else{
                    strData += '&' + key + '=' +  data[key];
                }
                num++;
            }
            return strData;
        }

    类似这样的字符串给到后台name=地方&bankCard=2321323123123&phone=13800138000

     
  • 相关阅读:
    leetcode44:wildcard
    Python实现决策树
    PCA实现
    js触摸事件
    js中的getBoundingClientRect()函数
    Java中timer的schedule()和schedualAtFixedRate()函数的区别
    nodejs中的exports和module.exports
    为什么MySQL数据库要用B+树存储索引
    浅谈微服务中的熔断,限流,降级
    缓存击穿、缓存穿透和缓存雪崩
  • 原文地址:https://www.cnblogs.com/lichuntian/p/8724116.html
Copyright © 2011-2022 走看看