我在我的应用程序的js文件中有这个语句,它在开始时加载,以便在每次ajax请求后检查会话超时。
if(window.jQuery)
{
$.ajaxSetup({
complete: function (xhr) {
if (xhr.getResponseHeader('SESS_TIMEDOUT') == "1") {
alert('Your session has timed out. Please login again!');
window.location = '/logout';
}
}
});
}
但后来我开始将所有静态文件放入CDN,现在我在控制台中出现了这种错误:
Uncaught TypeError: Cannot call method 'getResponseHeader' of undefined
$.ajaxSetup.completeform.js:10
c.extend.handleCompletejquery-1.4.4.min.js:143
c.extend.ajax.A.onload.A.onreadystatechange
显然xhr arg没有被传入。
我还注意到我的一个脚本有一个语句使用getScript()函数,其URL过去是'/js/script.js'但现在是'http://static.mydomain.com/ JS /的script.js'。跨域问题可能是罪魁祸首吗?
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
如果您要求对文档所在的域名进行ajax调用,则“是”,这将是跨域安全性的问题。如果CDN与ajax调用所在的服务器域完全不同,那么如果您的主HTML页面放在CDN上,这可能会导致同源问题。
本文档描述了Same Origin Policy,并且针对具有共同根域的不同子域进行了解决方法。这是解决CDN问题的一种方法,但它要求将CDN作为根域的子域,而不是完全独立的根域。
切换到CDN时,您必须确保所有相对路径仍然正确。 getScript()
可以从任何域加载。它不受相同来源的限制,但如果您使用相对路径并且您已更改根路径,则必须确保使用相对路径的所有内容也在CDN上或切换到绝对路径。 / p>