解决ajax请求参数过多导致参数被截断的问题

最近发现了个问题:某个ajax post请求查询参数数量动态变化有200-250000个,当参数超过一定数量N时(N大约1000),post传到后台接的参数就只有N个,多出的参数都没附到请求中,这也是奇怪的事情,浏览器对参数的个数有限制。

js

const payload = { date: "2024-05-10", sn: [] };
for (let i = 1; i < 10000; i++) {
  payload["sn"].push("aaaaaaaaaaaaaaaaaaaaaa");
}

$.ajax({
  type: "post",
  url: "../test/request.php",
  data: payload,
  beforeSend: function () {},
  success: function (res) {
    console.log(res);
  },
  error: function (xhr1) {},
});

php

ini_set('max_input_vars', 200000); //未生效

$data = $_REQUEST;
echo json_encode(['date' => $data['date'], 'num' => count($data['sn'])]);

结果如下,使用 ini_set 临时修改 max_input_vars 并未生效,大概只能去 php.ini 中修改了

最终解决方案:将数组参数变成字符串参数,减少传递的参数个数

js

const payload = { date: "2024-05-10", sn: "" };
const sn = [];
for (let i = 1; i <= 20000; i++) {
    sn.push("aaaaaaaaaaaaaaaaaaaaaa");
}
payload["sn"] = JSON.stringify(sn);

$.ajax({
    type: "post",
    url: "../test/request.php",
    data: payload,
    beforeSend: function () {},
    success: function (res) {
        console.log(res);
    },
    error: function (xhr1) {},
});

php

$data = $_REQUEST;
echo json_encode(['date' => $data['date'], 'num' => count(json_decode($data['sn'], true))]);
posted @ 2024-05-15 12:00  carol2014  阅读(237)  评论(0)    收藏  举报