ajaxSetup在使用CDN时出错

时间:2011-08-24 17:52:01

标签: php javascript jquery ajax cross-domain

我在我的应用程序的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'。跨域问题可能是罪魁祸首吗?

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

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

本文档描述了Same Origin Policy,并且针对具有共同根域的不同子域进行了解决方法。这是解决CDN问题的一种方法,但它要求将CDN作为根域的子域,而不是完全独立的根域。

切换到CDN时,您必须确保所有相对路径仍然正确。 getScript()可以从任何域加载。它不受相同来源的限制,但如果您使用相对路径并且您已更改根路径,则必须确保使用相对路径的所有内容也在CDN上或切换到绝对路径。 / p>