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視頻教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章