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

     
  • 相关阅读:
    SQL Server 2008高可用性系列:日志传送 天高地厚
    SPICE(简单协议独立计算环境) 天高地厚
    (转载)RedHat桌面虚拟化介绍 天高地厚
    css让页面居中
    (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?
    Excel对象
    .net开发人员应该知道(一)
    SQLSERVER 动态执行SQL sp_executesql与EXEC
    存储过程中的 SET NOCOUNT ON
    .net开发人员应该知道(二)
  • 原文地址:https://www.cnblogs.com/lichuntian/p/8724116.html
Copyright © 2011-2022 走看看