ThinkPHP中使用IS_AJAX判斷原生JS中的Ajax出現問題的解決方法
這篇文章帶給大家的內容是關於ThinkPHP中使用IS_AJAX判斷原生JS中的Ajax出現問題的解決方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
問題:
在 ThinkPHP 中使用原生 js 發起 Ajax 請求的時候、在控制器無法使用 IS_AJAX 進行判斷。而使用 jQuery 中的 ajax 是沒有問題的。
在ThinkPHP中、有一個判斷是ajax 請求的常數IS_AJAX;
Ajax 請求常用的有兩種情況:一種是原生js 的ajax 請求、一種是jQuery 的ajax請求。
分析:
先看看使用jQuery 中使用ajax 發送請求的時候的頭資訊:
Accept: application/json, text/javascript, */*; q=0.01 Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Content-Length: 22 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Origin: http://localhost Referer: http://localhost/ok/ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36 X-Requested-With: XMLHttpRequest
再看看使用JS 中的原生ajax 發送請求的時候的頭資訊:
Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Referer: http://localhost/tp/ User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36
再查看在TP是如何定義的常數IS_AJAX:
在tp3.2.3 版本中
\ ThinkPHP\Library\Think\App.class.php (Line:49)
define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
你會發現如下:
##使用jquery 傳送ajax請求的時候、比使用原生js 中的ajax 多一個請求頭X-Requested-With: XMLHttpRequest。 而 ThinkPHP 就是利用判讀是否存在請求頭這種原理去定義常數 IS_AJAX 的。function page( page ) { var ajax = new XMLHttpRequest() ajax.open( 'get', '__URL__/show?page='+page, true ) ajax.setRequestHeader("X-Requested-With", "XMLHttpRequest"); ajax.send() ajax.onreadystatechange = function () { if ( ajax.readyState == 4 && ajax.status == 200 ) { document.getElementById( 'box' ).innerHTML = ajax.responseText; } } }
設定完之後、再次看請求頭資訊、與之前的比較、多了一條如此問題便解決了。Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 Connection: keep-alive Cookie: PHPSESSID=ns9mjve234erh0qerlcl180v52 Host: localhost Referer: http://localhost/tp/index.php/Home/Index/show User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/547.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/547.36 X-Requested-With: XMLHttpRequest登入後複製以上是ThinkPHP中使用IS_AJAX判斷原生JS中的Ajax出現問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

執行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進入專案目錄,執行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復 bug 和提供新功能。目前最新穩定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩定版本以獲得最佳性能和支援。

ThinkPHP Framework 的本機運作步驟:下載並解壓縮 ThinkPHP Framework 到本機目錄。建立虛擬主機(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數。啟動 Web 伺服器。初始化 ThinkPHP 應用程式。存取 ThinkPHP 應用程式 URL 運行。

Laravel 和 ThinkPHP 框架的效能比較:ThinkPHP 效能通常優於 Laravel,專注於最佳化和快取。 Laravel 性能良好,但對於複雜應用程序,ThinkPHP 可能更適合。

《開發建議:如何利用ThinkPHP框架實現非同步任務》隨著網路技術的快速發展,Web應用程式對於處理大量並發請求和複雜業務邏輯的需求也越來越高。為了提高系統的效能和使用者體驗,開發人員常常會考慮利用非同步任務來執行一些耗時操作,例如發送郵件、處理文件上傳、產生報表等。在PHP領域,ThinkPHP框架作為一個流行的開發框架,提供了一些便捷的方式來實現非同步任務。

ThinkPHP 安裝步驟:準備 PHP、Composer、MySQL 環境。使用 Composer 建立專案。安裝 ThinkPHP 框架及相依性。配置資料庫連線。產生應用程式碼。啟動應用程式並造訪 http://localhost:8000。

ThinkPHP 是一款高效能的 PHP 框架,具備快取機制、程式碼最佳化、平行處理和資料庫最佳化等優勢。官方性能測試顯示,它每秒可處理超過 10,000 個請求,實際應用中被廣泛用於京東商城、攜程網等大型網站和企業系統。

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用
