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

jQuery Post请求中submission参数被自动追加[]的问题求助

问题描述

我尝试用以下参数发起POST请求:

const postParams = { 'submission': submission };

但在浏览器网络面板中发现,实际发送的参数名从submission变成了submission[],而我的服务器只接受submission作为参数名,导致请求处理异常。
注:submission是一个整数数组,我理解jQuery自动追加[]的原因,但需要去掉这个后缀。

完整请求代码如下:

const postParams = {  submission: str_sub };
console.log(postParams)
$.post(root+'/problems/multiple_choice/'+problem_pk+'/run',
        postParams,
        function(data) {
           // 无关代码已省略
        })
 .fail(function(jqXHR, textStatus, errorThrown) { console.log(textStatus); });
解决方法

jQuery默认会给数组类型的请求参数添加[]后缀,以此适配PHP等后端的参数解析逻辑。要去掉这个后缀,可采用以下几种方式:

方式1:全局禁用数组参数自动加后缀

在发起任何AJAX请求前,添加一行全局配置:

$.ajaxSettings.traditional = true;

之后所有通过jQuery发送的AJAX请求(包括$.post)都会使用传统序列化规则,数组参数不再自动追加[]。

方式2:针对单个请求单独配置

如果不想修改全局规则,可改用$.ajax方法并手动指定traditional: true:

const postParams = { submission: str_sub };
console.log(postParams);
$.ajax({
  url: root+'/problems/multiple_choice/'+problem_pk+'/run',
  type: 'POST',
  data: postParams,
  traditional: true,
  success: function(data) {
    // 处理成功逻辑
  },
  error: function(jqXHR, textStatus, errorThrown) {
    console.log(textStatus);
  }
});

方式3:手动拼接表单数据(精细控制场景)

若上述方法不适用,可自行拼接符合application/x-www-form-urlencoded格式的请求体:

// 将数组转换为 submission=值1&submission=值2... 的格式
const formData = str_sub.map(item => `submission=${encodeURIComponent(item)}`).join('&');
$.post(root+'/problems/multiple_choice/'+problem_pk+'/run',
        formData,
        function(data) {
           // 处理成功逻辑
        })
 .fail(function(jqXHR, textStatus, errorThrown) { console.log(textStatus); });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:15:37