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

通过AJAX发送大型对象数组至PHP时的异常问题排查

解决大数组AJAX提交到000webhost后$_POST为空的问题

看起来你遇到的核心问题是免费主机的PHP配置限制——本地XAMPP默认配置比较宽松,但000webhost的免费方案为了控制服务器资源,会对POST数据的大小、输入变量数量做严格限制,甚至可能强制覆盖用户通过.htaccess设置的参数。下面给你几个可行的解决思路:

1. 先确认主机的实际PHP配置

首先得搞清楚000webhost的PHP参数是不是真的生效了——免费主机经常会忽略用户的.htaccess配置。你可以在saveStories.php里加一段代码:

<?php
phpinfo();
?>

访问这个文件,找到post_max_size、max_input_vars、upload_max_filesize这几个参数,看看实际值是不是你设置的20M和100000。如果没变化,说明主机不允许通过.htaccess修改这些参数,得换其他方式。

2. 分批次发送数组

既然小批量数据能正常提交,最稳妥的办法就是把大数组切成小块分批发送。比如每次发100个对象,用Promise来处理批量请求,确保所有数据都能提交成功:

前端JS代码:

// 先排序数组
const storiesToSave = Stories.sort((a,b) => new Date(a.date) - new Date(b.date));
// 定义每批次发送的数量
const batchSize = 100;
const batches = [];

// 分割数组成多个批次
for (let i = 0; i < storiesToSave.length; i += batchSize) {
  batches.push(storiesToSave.slice(i, i + batchSize));
}

// 批量发送请求,用Promise.all确保所有批次完成
Promise.all(batches.map(batch => {
  return $.ajax({
    type: 'POST',
    url: "saveStories.php",
    data: {"stories": JSON.stringify(batch)},
    dataType: 'json'
  });
})).then(allResults => {
  alert('所有故事都保存成功啦!');
}).catch(error => {
  alert(`保存出错:${error.message}`);
});

后端PHP代码调整:

你需要修改saveStories.php,让它能处理分批的数据——比如如果是存数据库就用批量插入,存文件就追加内容:

<?php
if (!empty($_POST['stories'])) {
  $stories = json_decode($_POST['stories'], true);
  // 这里写你的保存逻辑,示例:批量插入数据库
  // $stmt = $pdo->prepare("INSERT INTO stories (date, content) VALUES (?, ?)");
  // foreach ($stories as $story) {
  //   $stmt->execute([$story['date'], $story['content']]);
  // }
  echo json_encode(['status' => 'success']);
} else {
  echo json_encode(['status' => 'error', 'msg' => '无有效数据提交']);
}
?>

3. 修正JSON Content-Type的使用方式

你之前尝试的第二种方案(设置contentType: "application/json")本地失效,是因为PHP不会自动把JSON格式的POST数据解析到$_POST里,需要手动读取php://input。如果想用这个方案,后端代码要改成:

<?php
$jsonData = file_get_contents('php://input');
$data = json_decode($jsonData, true);
if (!empty($data['stories'])) {
  $stories = $data['stories'];
  // 执行保存逻辑...
  echo '保存成功';
}
?>

不过这个方案还是绕不开主机的POST大小限制,所以结合分批次发送效果更好。

4. 联系主机客服调整配置

如果分批发送对你的业务逻辑不太友好,可以试试联系000webhost的客服,问问能不能免费调高max_input_vars和post_max_size的限制——虽然免费主机可能性不大,但值得一试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:17