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

Windows Server 2016(IIS环境)下PHP代码JSON功能异常排查求助

解决方案:Uncaught TypeError: right-hand side of 'in' should be an object, got null

看起来你遇到的问题核心是前端收到的API响应没有被正确解析成JSON对象,导致json变量为null,进而触发了'in'操作符的错误。我来给你几个针对性的排查方向:

1. 先确认API实际返回的内容

打开浏览器的开发者工具(F12)切换到Network标签,重新触发条形码检索操作,找到对应的API请求:

  • 查看请求的状态码(正常应该是200),如果是500/404等错误,说明IIS没有正确处理API请求,返回的是错误页面而非JSON
  • 查看Response标签里的内容,确认是不是符合格式的JSON字符串。如果返回的是IIS的错误HTML页面(比如“500内部服务器错误”),那前端自然无法解析成JSON,就会得到null

2. 检查PHP的JSON扩展是否正常加载

虽然你的另一PHP站点能正常运行,但这个库存工具可能依赖PHP的JSON扩展处理:

  • 在服务器上新建一个phpinfo.php文件,内容为<?php phpinfo(); ?>
  • 访问这个文件,搜索“json”关键词,确认json扩展已启用(如果看到json support => enabled就是正常的)
  • 如果没启用,打开php.ini文件,找到;extension=php_json.dll这一行,去掉前面的分号;,重启IIS服务

3. 验证API响应的Content-Type头

即使你在IIS里配置了JSON MIME类型,PHP代码也需要主动设置正确的响应头:

  • 找到工具中处理API请求的PHP文件,确认开头有没有添加header('Content-Type: application/json; charset=utf-8');
  • 如果没有添加,加上这行代码,确保浏览器能识别返回的是JSON内容,自动解析成对象

4. 检查前端的响应解析逻辑

有时候前端可能没有正确处理API响应的解析:

  • 在parseResponse函数开头添加调试代码:
    function parseResponse(barcode, json) {
        console.log("Received data:", json, "Type:", typeof json);
        var resdata = {}
        if ('errorsExist' in json) { ...
    
  • 如果控制台输出的是字符串类型,说明前端没有把响应文本解析成JSON对象,需要检查请求代码(比如用fetch的话,是不是漏了.json();用XMLHttpRequest的话,是不是没调用JSON.parse(responseText))

5. 确认IIS的PHP映射覆盖了API路径

确保IIS的PHP处理程序映射(FastCGI)覆盖了工具API的所有路径:

  • 打开IIS管理器,找到你的站点,进入Handler Mappings
  • 确认PHP_via_FastCGI的路径映射是*(处理所有请求),或者至少包含工具API的路径(比如/api/*)
  • 如果之前添加的脚本映射是针对ASP的,可能和PHP冲突,可以暂时禁用ASP相关的映射,测试是否解决问题

内容的提问来源于stack exchange,提问作者T. Gore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:17:35