移动端非www前缀域名下Ajax功能失效问题求助
问题描述
- 桌面端访问
domain.com或www.domain.com,网页Ajax功能均正常 - 移动端访问
www.domain.com功能正常,但访问裸域名domain.com时,仅Ajax按钮失效:onclick事件里的alert能触发,但showRegistrationForm函数内的逻辑(包括Ajax请求)无响应 - 服务器为IIS6,已配置
domain.com和www.domain.com两个网站标识,Ajax请求本地文件Server.asp,当前无URL重写/重定向功能,也没有web.config文件
相关代码
页面按钮代码
<!-- mainpage --> <button onclick="showRegistrationForm();"><b>Register</b></button>
JavaScript函数代码(scripts.js)
function showRegistrationForm() { var xhr = new XMLHttpRequest(); xhr.open('GET', 'Server.asp?a=newform', true); xhr.onload = function() { if(this.status == 200){ document.getElementById('regform').innerHTML=this.responseText; } else { document.getElementById('errmsg').innerHTML="Status " + this.status; } } xhr.onerror = function(){ console.log('Request Error...');} xhr.send() }
排查与解决方法
1. 修正Ajax请求路径
部分移动端浏览器对相对路径的解析存在差异,改成动态获取当前域名的绝对路径:
function showRegistrationForm() { var baseUrl = window.location.protocol + '//' + window.location.host; var xhr = new XMLHttpRequest(); xhr.open('GET', baseUrl + '/Server.asp?a=newform', true); // 剩余逻辑保持不变 }
2. 核对IIS6双站点配置
确认domain.com和www.domain.com两个站点的配置完全一致:
- 检查两个站点的根目录是否指向相同的文件路径
- 确认
Server.asp的匿名访问权限、脚本执行权限在双站点下无差异 - 查看裸域名站点的HTTP头设置,是否存在
Content-Security-Policy等安全头限制了XMLHttpRequest请求
3. 处理移动端缓存与协议问题
- 给
scripts.js添加版本参数强制刷新缓存:<script src="scripts.js?v=202405"></script> - 检查移动端浏览器是否自动将裸域名跳转至HTTPS,若站点未配置HTTPS,会导致Ajax请求失败(可通过移动端浏览器开发者工具查看网络请求状态)
4. 移动端调试定位错误
在移动端浏览器开启开发者工具(如Chrome远程调试),查看控制台输出:
- 确认
showRegistrationForm函数是否真的执行,可在函数开头添加console.log('form function triggered') - 查看是否有XMLHttpRequest相关的错误提示(如跨域、404、500状态码)
内容的提问来源于stack exchange,提问作者Samm B
相关产品推荐
相关产品推荐

