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

WordPress中jQuery Ajax POST大JSON串触发503错误排查求助

排查WordPress Ajax POST请求503错误(长JSON字符串触发)
  • 检查PHP相关参数限制
    除了已确认的post_max_size,还要重点排查这几个参数:

    • max_input_vars:PHP默认限制单个请求的输入变量数为1000,若你的JSON结构复杂,解析后生成的变量数超过这个值会触发拦截。可在php.ini或站点根目录的.htaccess中设置max_input_vars = 5000(或更高)。
    • upload_max_filesize:部分服务器会关联该参数,确保其值不小于post_max_size。
    • max_input_time:如果处理长数据耗时超过默认的60秒,也可能引发503,可调整为max_input_time = 120。
  • 排查服务器安全模块拦截
    很多服务器搭载的ModSecurity、Cloudflare等工具会拦截过长或包含特定模式的请求:

    • 查看ModSecurity日志,确认是否有针对该请求的拦截记录,如有可添加规则放行admin-ajax.php的POST请求。
    • 若使用Cloudflare,检查防火墙规则是否触发了“请求过长”拦截,在控制台调整对应阈值或添加白名单。
  • 检查WordPress插件/主题限制

    • 安全类插件(如Wordfence)通常会对POST请求的长度、内容做限制,进入插件设置页,调整请求长度阈值或把admin-ajax.php加入白名单。
    • 确认wp-config.php中WP_MEMORY_LIMIT的设置,处理长JSON可能需要更多内存,可设置define('WP_MEMORY_LIMIT', '256M');。
  • 调试请求实际数据状态

    • 前端用encodeURIComponent(fields).length计算编码后的数据长度,确认是否真的未超出post_max_size(注意字符数和编码后字节数的差异)。
    • 在PHP回调函数开头,将$_POST的大小和内容写入日志文件,检查数据是否被截断或根本未被接收。
  • 更换数据传输方式
    若以上排查无效,可尝试直接将JSON放入请求体,绕过Form Data的变量解析限制:
    前端代码:

    $.ajax({
        url: 'admin-ajax.php',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({
            action: 'save_fields',
            fieldsData: fields
        }),
        success: function(response){
            
        }
    })
    

    PHP回调代码:

    add_action('wp_ajax_save_fields', 'save_fields_callback');
    function save_fields_callback() {
        $raw_data = file_get_contents('php://input');
        $data = json_decode($raw_data, true);
        $fieldsData = $data['fieldsData'];
        // 后续处理逻辑
        wp_send_json_success();
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:25:09