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
相关产品推荐
相关产品推荐

