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
相关产品推荐
相关产品推荐

