ajaxSetup在使用CDN时给出错误



我在我的应用程序的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参数没有传入

我还注意到我的一个脚本有一个使用getScript()函数的语句,该函数的URL曾经是'/js/script.js',但现在是'http://static.mydomain.com/js/script.js'。跨域问题是罪魁祸首吗?

对于如何解决这个问题有什么想法吗?

如果您请求的ajax调用与文档所在的域不同,则"是",这将是跨域安全性的问题。如果您的CDN与ajax调用所在的服务器域完全不同,如果您的主HTML页面放在CDN上,这可能会导致同源问题。

本文档描述了同源策略,并为具有公共根域的不同子域提供了解决方案。这是解决CDN问题的一种方法,但它需要使CDN成为根域的子域,而不是完全独立的根域。

切换到CDN时,您必须确保所有相对路径仍然正确。getScript()可以从任何域加载。它不受同源限制,但如果你使用相对路径并且你已经改变了根路径,你必须确保所有使用相对路径的东西也在CDN上,或者切换到绝对路径

相关内容

  • 没有找到相关文章

最新更新