zoukankan      html  css  js  c++  java
  • ajax 全局拦载处理,可加密、过滤、筛选、sql防注入处理

    //此方法放在公用的js里面即可。如此:所有的ajax请求都会通过此
    $.ajaxSetup({
    contentType: "application/x-www-form-urlencoded;charset=utf-8",
    beforeSend: function() { //发送前执行的函数
    try {

    /**

    * 当 processData: false,此时后台接收的值都会是object类型。此时应该把所有参数拿出来做成序列化形式 如:"name=bill&age=18" 否则后台无法接收

    * 当 processData: true或者不设置时 json数据是已经序列化成字符类型 。如:"name=bill&age=18"。应用以下方法;
    */
    //var params = arguments[1].data;
    //if (params !== "" || params !== null) {
    // var re = /select|update|delete|truncate|join|union|exec|insert|drop|count|’|--|"|=|;|>|<|%/i;
    // params.split('&').forEach(function (item) { //js的forEach()方法
    // item = item.split("=");
    // var name = item[0];//名称
    // var val = item[1];//值
    // if (re.test(item[1])) {
    // alert("请勿输入非法字符");
    // arguments[0].abort(); //终止请求
    // //请求方法记录相关日志
    // //location.href = arguments[1].data.replace(sQuery, "");
    // }
    // });
    //}

    var params = arguments[1].data; //arguments是一个两个值的数组分别是0和1
    re = /select|update|delete|truncate|join|union|exec|insert|drop|count|’|--|"|=|;|>|<|%/i; //可以根据需求自定义加减
    for(var key in params) {
    console.log(params[key]);
    if(re.test(params[key])) {
    alert("请勿输入非法字符");
    arguments[0].abort(); //终止请求
    //请求方法记录相关日志
    //location.href = params.replace(sQuery, "");//跳转到某个页面
    }else{

    //加密在此处做。后台可以做全局统一解密

    //此时应该把所有参数拿出来做成序列化形式 如:"name=bill&age=18" 否则后台无法接收

    }
    }
    } catch(e) {
    console.log(e);
    //请求方法记录相关日志
    }
    },
    complete: function(XMLHttpRequest, textStatus) {
    try {
    //通过XMLHttpRequest取得响应头,sessionstatus,
    //var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
    //if(sessionstatus == "timeout") {
    //如果超时就处理 ,指定要跳转的页面(比如登陆页)
    //}
    //此处可以对响应回来的数据进行解密
    debugger;
    if(textStatus !== "error") {
    //通过XMLHttpRequest取得响应结果
    var res = XMLHttpRequest.responseText;
    var jsonData = JSON.parse(res);
    console.log(jsonData);
    if(jsonData.state == -1) {
    //如果超时就处理 ,指定要跳转的页面(比如登陆页)
    alert(jsonData.msg);
    window.location.replace("/login/index.php");
    } else if(jsonData.state == 0) {
    //其他的异常情况,给个提示。
    alert(jsonData.msg);
    } else {
    //正常情况就不统一处理了
    }
    }
    //请求方法记录相关日志
    } catch(e) {
    console.log(e);
    //请求方法记录相关日志
    }
    },
    error: function(jqXHR, textStatus, errorMsg) { // 出错时默认的处理函数
    try {
    // jqXHR 是经过jQuery封装的XMLHttpRequest对象
    // textStatus 可能为: null、"timeout"、"error"、"abort"或"parsererror"
    // errorMsg 可能为: "Not Found"、"Internal Server Error"等
    // 提示形如:发送AJAX请求到"/index.html"时出错[404]:Not Found
    alert('发送AJAX请求到"' + this.url + '"时出错[' + jqXHR.status + ']:' + errorMsg);
    //请求方法记录相关日志
    } catch(e) {
    console.log(e);
    //请求方法记录相关日志
    }
    },
    statusCode: { //自定义返回消息
    404: function() {
    alert('数据获取/输入失败,没有此服务。404');
    },
    504: function() {
    alert('数据获取/输入失败,服务器没有响应。504');
    },
    500: function() {
    alert('服务器有误。500');
    }
    },
    //因为 jquery 在 GET 方法中会自动把 data 附加在 url 后面,所以将 processData 设置为 false 之后 url 后面会出现 [object object] ,这是 javascript 对象 toString() 过后的结果,也就是说我们的这个方法并不很适合 GET 方法
    processData: false, //默认不序列化参数//dataFilter:对响应的数据进行过滤
    });

  • 相关阅读:
    NYOJ127 星际之门(一)【定理】
    JAVAWEB开发之JSTL标签库的使用、 自己定义EL函数、自己定义标签(带属性的、带标签体的)
    如何写一个不可变类
    保护性拷贝
    猴子搬香蕉问题
    阿里云服务器安装redis启动失败问题排查
    oauth2测试
    远程连接云服务器上的mysql失败问题解决
    SQLServer中将yyyy:MM:dd HH:mm:ss.sss转为yyyyMMddHHmmss
    Centos8 安装 MySQL
  • 原文地址:https://www.cnblogs.com/Mr-lin66/p/9655881.html
Copyright © 2011-2022 走看看