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

HTML5 Worker通过XMLHttpRequest请求PHP返回值undefined问题求助

错误原因&修复方案

1. XMLHttpRequest异步处理逻辑顺序错误

XMLHttpRequest是异步请求对象,你当前代码的执行顺序完全颠倒:你在请求刚初始化、还没发送、更没收到响应的时候就提前读取了responseText,这时候值必然为空,自然拿不到msg字段。你需要监听onload事件,等请求成功返回后再处理响应内容。

2. 没有对JSON格式的响应做解析

PHP返回的{"msg":29}是JSON字符串,不是JS原生对象,你需要先调用JSON.parse()把字符串转成JS对象之后,才能访问msg属性。

3. POST请求头配置缺失

用XHR发送POST请求时,需要手动设置Content-Type请求头为对应格式,否则PHP后端无法正常接收你传过去的Totalaccounts参数。

4. 循环变量更新逻辑缺失

你当前的逻辑里没有把请求返回的新值赋值给Totalaccounts,下一轮循环还是用的初始值,不会更新。


修正后的Worker Script代码

onmessage = function(dbs) {
  console.log(dbs.data);
  // 如果主脚本传过来的是字符串格式的数字,先转成数值类型
  var Totalaccounts = Number(dbs.data);
  
  var DBScriptLoop = setInterval(function () {
    DBStartWorking(); 
  }, 123000);

  function DBStartWorking(){
    for (var dw = 0; dw < Totalaccounts; dw++) {
      setTimeout(function() {
        const httpRequest = new XMLHttpRequest();
        // 先绑定请求成功的回调
        httpRequest.onload = function() {
          if (httpRequest.status === 200) {
            // 解析JSON字符串为JS对象
            const dataresponse = JSON.parse(httpRequest.responseText);
            const NewCount = dataresponse.msg;
            // 更新循环用的Totalaccounts值
            Totalaccounts = NewCount;
            postMessage(NewCount);
            console.log(NewCount);
          }
        };
        // 再打开请求、设置头、发送数据
        httpRequest.open('POST', 'DostuffV1.php');
        // 走常规$_POST接收的话设置这个头
        httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        httpRequest.send('Totalaccounts=' + Totalaccounts); 
      }, 1200 * dw);
    }
  }
};

适配说明

如果你PHP端是用file_get_contents('php://input')拿原始POST数据,不是用$_POST的话,修改请求配置即可:

httpRequest.setRequestHeader('Content-Type', 'application/json');
httpRequest.send(JSON.stringify(Totalaccounts));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:27:01