You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AJAX POST请求后PHP返回响应无法在AJAX中接收的问题

问题排查与修复方案

核心问题:PHP输出格式错误

你的PHP代码中,json_decode($response, true)会将第三方API的JSON响应转换为关联数组,直接执行echo $json时,PHP会输出字符串Array,而非合法的JSON格式。而AJAX指定了dataType: "json",会尝试将响应解析为JSON,解析失败则不会触发success回调。

修复步骤:

  1. 输出合法JSON:将echo $json;替换为直接返回第三方API的原始JSON响应,或重新编码数组为JSON字符串。推荐直接返回原始响应,避免二次编码问题:

    // 替换原echo $json;语句
    echo $response;
    

    若需处理数组后再输出,使用json_encode:

    echo json_encode($json);
    
  2. 修正curl错误检查时机:当前在curl_close($ch)后检查错误,此时句柄已关闭,无法获取有效错误信息,需调整顺序:

    $response = curl_exec($ch);
    if($e = curl_error($ch)) {
        echo json_encode(['error' => $e]);
    } else {
        createCookie($json['authToken']);
        echo $response;
    }
    curl_close($ch);
    
  3. 添加JSON响应头:在PHP脚本开头添加响应头,明确告知客户端返回格式:

    header('Content-Type: application/json');
    

其他排查点

  • 添加AJAX错误回调:捕获解析失败或请求错误的具体信息:
    jQuery.ajax({
        type: "POST",
        url: "proxy.php?url=https://***/***",
        dataType: "json",
        contentType: 'application/x-www-form-urlencoded',
        data: data,
        success: function (data){
            console.log('succesful', data)
        },
        error: function(xhr, status, error) {
            console.log('AJAX错误:', status, error);
            console.log('响应内容:', xhr.responseText);
        }
    }); 
    
  • 检查createCookie函数:确保该函数没有输出额外内容(如空格、HTML标签),否则会破坏JSON格式。
  • 临时开启PHP错误提示:排查PHP是否存在隐性报错:
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    

内容的提问来源于stack exchange,提问作者Emm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:04:57