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

CodeIgniter 中 AJAX 傳值導致 PHP echo 失敗的根因與修復

     編輯:程式設計綜合問答

現象復現

CI 框架下,JS $.post() 發送數據,控制器方法:

  • 無 echo → AJAX success 回調觸發,返回空字符串。
  • 有 echo "ok" → AJAX error 回調觸發,返回 HTTP 200 但解析失敗。

根因分析

CI 的 Output 類在輸出時會檢測 ob_get_level(),若開發環境開啟錯誤報告,任何 Notice/Warning 都會被輸出到響應體,導致 JSON 格式破壞。典型場景:

Notice: Undefined variable: x in ...\nok"
?>

JS 期望 JSON,收到 HTML 混雜文本 → JSON.parse 拋錯 → 進入 error 回調。

解決方案

  1. 關閉顯示錯誤:php.ini 設 display_errors = Off,或代碼開頭 error_reporting(0);(生產環境必須)。
  2. 統一 JSON 輸出:控制器返回統一結構:
public function api_method() {
    $this->output
         ->set_content_type('application/json')
         ->set_output(json_encode(['status' => true, 'data' => $result]));
}
  1. 避免直接 echo:改用 $this->output->set_output(),確保無額外輸出。
  2. 檢查輸出緩衝:確保無 var_dump、print_r、空白字符輸出。

調試技巧

  • 瀏覽器 Network 面板查看 Response 原始內容,而非 Preview。
  • 臨時在 JS error: function(xhr){ console.log(xhr.responseText); } 打印原始響應定位雜質。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved