首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Discuz! UCHome ajaxpost 進階技巧:非同步提交結果輪詢判斷

     編輯:PHP 綜合知識

場景

預設 onclick="ajaxpost('formid')" 提交後,提示訊息顯示在 __formid 區塊。需在提交前清空舊訊息,提交後輪詢判斷成功並跳轉。

改良版按鈕綁定

onclick="$('__formid').innerText=''; ajaxpost('formid'); checkPostResult();"

輪詢判斷函數

function checkPostResult() {
    var cid = setInterval(function() {
        if ($('__formid').innerText == 'success') {
            alert('提交成功');
            location.href = 'xxxxx.php';
            clearInterval(cid);
        }
    }, 1000);
}

原理解析

  • ajaxpost 為非同步 (AJAX),回呼時提示訊息尚未寫入 DOM。
  • setInterval 每秒檢查 __formid 內容,直到出現 success 關鍵字。
  • clearInterval 停止輪詢,避免記憶體洩漏。

改進建議

  1. 改用 Promise / async-await (需 ajaxpost 回傳 Promise) 或 jQuery $.ajax 直接處理回呼。
  2. 伺服器端回傳 JSON 格式 {status: 'success', url: '...'},前端統一解析,避免依賴 DOM 文字內容。
  3. 加入逾時機制 (如 30 秒) 防止無限輪詢。

適用版本

Discuz! X / UCHome 內建 ajaxpost (基於 Ajax 類) 的專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved