MVC中AJAX调用生产环境返回302且无法获取数据求助
问题排查与解决方案
1. 处理302跳转问题
- 302状态码基本是身份验证触发的重定向,生产环境大概率启用了身份验证机制,AJAX请求未携带认证信息导致被跳转到登录页面。
- 若用表单验证:在AJAX请求中加入
__RequestVerificationToken,可从页面的<input name="__RequestVerificationToken">获取值,放到请求头或表单参数里。 - 若用Windows身份验证:检查生产环境站点的身份验证设置,要么允许目标Action匿名访问,要么给AJAX请求配置
withCredentials: true(仅限同域或已配置CORS的跨域场景)。 - 排查IIS的URL重写规则,避免错误重定向AJAX请求的Action路径。
- 若用表单验证:在AJAX请求中加入
2. 解决404脚本加载错误
- 控制台报错的
ajax.ts是TypeScript源文件,生产环境不应直接加载.ts文件,必须引用编译后的.js文件。检查页面脚本引用路径,替换为编译后的JavaScript文件路径。 - 确认生产环境静态资源部署完整性,该脚本文件是否存在于对应目录,若用CDN则检查CDN配置是否正确。
3. 适配生产环境大数据量
- MVC默认JSON序列化长度有限,大数据量会触发异常。在
Web.config中配置最大序列化长度:<configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="2147483647" /> </webServices> </scripting> </system.web.extensions> </configuration> - 同时延长请求超时时间,避免大数据处理超时:
<system.web> <httpRuntime executionTimeout="300" /> <!-- 单位:秒 --> </system.web>
4. 修复隐藏域内容异常
- 隐藏域被写入脚本,本质是302跳转后返回了登录页HTML而非目标JSON。先解决302问题,再验证AJAX返回内容。
- 在AJAX的
error回调中打印响应内容,确认返回的是否为登录页:$.ajax({ url: '/Controller/TargetAction', type: 'GET', success: function(data) { $('#targetHiddenField').val(JSON.stringify(data)); }, error: function(xhr) { console.log(xhr.responseText); // 打印响应内容,定位是否为登录页HTML } });
内容的提问来源于stack exchange,提问作者sadiqshaik
相关产品推荐
相关产品推荐

