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

仅Firefox浏览器提交表单时Ajax返回400 Bad Request错误求助

问题原因
  • 参数位置错误:$.post()是jQuery封装的快捷POST请求方法,语法规则为$.post(请求地址, 请求体参数, 成功回调函数),代码中错误将请求配置项type、contentType放到了请求体参数中,Chrome浏览器对这类错误参数有自动容错机制,而Firefox会严格执行传参规则,导致WordPress后台的admin-ajax.php无法正确解析到必填的action、_ajax_nonce参数,直接返回400错误。
  • 数据格式不匹配:WordPress的Ajax处理接口admin-ajax.php默认只解析application/x-www-form-urlencoded格式的请求参数,若设置了JSON格式的请求头又没有对应修改后台的参数读取逻辑,后台无法从$_POST全局变量中拿到参数,也会触发400错误。
修复方案

推荐使用WordPress Ajax默认适配的x-www-form-urlencoded格式,无需修改后台原有参数读取逻辑,修复后的前端代码如下:

jQuery(document).ready(function($){
    jQuery( 'form[name="contact-me"]' ).on( 'submit', function(e) {
        e.preventDefault();
        var form_data = {};
        $(this).serializeArray().forEach( function(element){
            form_data[element.name] = element.value;
        });
        $.ajax({
            url: zt_send_form_obj.ajax_url,
            type: 'POST',
            data: {
                action: "zt_save_campain_form_data",
                _ajax_nonce: zt_send_form_obj.nonce,
                values: form_data
            },
            success: function(data) {
                if (data.success) {
                    if(data.data.info.message=='no'){
                        $('#myModal').show();
                        console.log('cod is in')
                    }
                    if(data.data.info.message=='yes'){
                        $('#CodeModal').show();
                        $('.the_cod_div').append('<span>'+data.data.info.code+'</span>');
                        console.log('data saved');
                    }
                } else {
                    console.log("not working");
                }
            }
        });
    });
});

对应后台PHP代码可直接读取$_POST['values']获取数组格式的表单内容,无需再做JSON解析。

如果确实需要使用JSON格式传参,可按以下方式调整:

  1. 前端配置正确的请求头和参数格式:
jQuery(document).ready(function($){
    jQuery( 'form[name="contact-me"]' ).on( 'submit', function(e) {
        e.preventDefault();
        var form_data = {};
        $(this).serializeArray().forEach( function(element){
            form_data[element.name] = element.value;
        });
        $.ajax({
            url: zt_send_form_obj.ajax_url,
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify({
                action: "zt_save_campain_form_data",
                _ajax_nonce: zt_send_form_obj.nonce,
                values: form_data
            }),
            success: function(data) {
                // 原有回调逻辑不变
            }
        });
    });
});
  1. 后台PHP修改参数读取逻辑,从输入流中解析JSON数据:
$input_data = json_decode(file_get_contents('php://input'), true);
$action = $input_data['action'] ?? '';
$nonce = $input_data['_ajax_nonce'] ?? '';
$form_values = $input_data['values'] ?? [];
// 后续nonce验证、业务处理逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:04