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

XMLHttpRequest无法POST数据求助(新手)

解决XMLHttpRequest POST请求404和JSON解析错误的问题

我来帮你一步步排查这个问题,从错误信息和代码来看,主要是路径匹配错误和请求参数格式不对这两个核心问题,咱们逐个解决:

一、先搞定404错误:URL路径要匹配实际文件位置

你的文件结构是根目录下有index.php、store.php,init.js在js/文件夹里。那从init.js的位置出发,要访问根目录的store.php,正确的相对路径应该是../store.php(../表示回到上级目录,也就是根目录)。

你之前试的各种路径里,硬编码的http://localhost/thissite/store.php如果和表单提交的目标URL完全一致的话理论上也能行,但相对路径更灵活,不会因为域名或站点根目录变化出问题。

另外,错误信息里显示请求的是http://localhost/thissite/post,这说明你代码里的URL可能和实际要访问的store.php不匹配,一定要确保XMLHttpRequest的url和HTML表单的action属性完全相同。

二、修复JSON解析错误:参数格式不能用HTML实体

你在xmlhttp.send()里写的参数用了&,这是HTML里用来转义&的字符,但在JavaScript字符串里不需要这么做!直接用&分隔参数就可以了。

如果用&amp;,PHP会把它当成参数的一部分,导致参数解析失败,返回的不是你预期的JSON,而是错误提示的HTML页面——这就是为什么你会看到Unexpected token < in JSON at position 0的错误(因为返回的HTML开头是<标签,不是JSON格式)。

修正后的完整代码

function sendData() {
  let xmlhttp;
  // 用相对路径更可靠,适配不同环境
  const url = "../store.php";
  if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
  } else {
    // 兼容旧IE的写法可以保留,但现在几乎没人用了
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  xmlhttp.open("POST", url, true);
  xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  
  // 把&amp;换成&,正确的参数分隔方式
  xmlhttp.send("sitetarget=/thissite/&buttontarget=firstbutton&amount=2");
  
  // 加上响应处理,方便调试
  xmlhttp.onload = function() {
    if (this.status >= 200 && this.status < 400) {
      try {
        const response = JSON.parse(this.responseText);
        console.log("请求成功,响应数据:", response);
      } catch (e) {
        console.error("JSON解析失败,返回内容:", this.responseText);
        // 这里可以看到返回的到底是啥,方便排查PHP返回的问题
      }
    } else {
      console.error("请求出错,状态码:", this.status);
    }
  };
  
  xmlhttp.onerror = function() {
    console.error("请求发生网络错误");
  };
}

额外调试建议

  • 打开浏览器开发者工具(F12),切换到Network标签,触发sendData()函数,查看请求的URL、参数、响应内容,确认和表单提交的请求是否一致。
  • 检查store.php的文件权限,确保Web服务器有权限读取和执行它。
  • 如果还是有问题,查看Web服务器的访问日志,看看404错误的具体路径,确认站点根目录的映射是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:54:00