thinkphp5或者thinkphp3.2的isAjax无效的原因以及解决方案

【先言】:当你是跨域时,tp内置的这个方法就完全鸡肋了(也就是说无用)

【场景】:

①:不跨域,自己增加请求头设置"X-Requested-With"这的值为 "XMLHttpRequest",至于怎么增加请求头自己去百度,网上一大堆,这里我就懒得写了,加了这个请求头之后就ok了

②:跨域,

 当为跨域的时候,你是无法增加请求头的,即时你加也是徒劳无功,它不认了。原因是(ajax跨域只能指定jsonp格式的数据,这个就不是XMLHttpRequest对象了,所以此时在php中$_SERVER['HTTP_X_REQUESTED_WITH']是没有的)

【个人解决方案】:(注-只是简单解决,未必满足所有,当你发现下面的也满足不了的时候,自己打印$_SERVER看看,具体情况具体解决):

/**
 * 当框架内部的isAjax不再适用时可使用此方法进行判断请求是否为ajax请求
 * 框架内部isAjax失效原因:跨域时不再适用
 * @return bool  返回真为ajax请求,否则就不是
 */
function isAjax(){
    switch ($_SERVER['HTTP_ACCEPT']){
        case 'application/json, text/javascript, */*':
            //  JSON 格式
            return true;
            break;
        case 'application/json, text/plain, */*':
            //  JSON 格式
            return true;
            break;
        case 'text/javascript, application/javascript, */*':
            // javascript 或 JSONP 格式
            return true;
            break;
        case 'text/html, */*':
            //  HTML 格式
            return true;
            break;
        case 'application/xml, text/xml, */*':
            //  XML 格式
            return true;
            break;
        default:
            return false;
    }
}

【php交流超级大群】:493965063

【php专业免费学习视频论坛】:php视频教程

发布了74 篇原创文章 · 获赞 125 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/df981011512/article/details/86716735