【问题标题】:ajaxSetup giving errors when using CDNajaxSetup 在使用 CDN 时出错
【发布时间】:2011-11-03 01:06:38
【问题描述】:

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

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

【问题讨论】:

    标签: php javascript jquery ajax cross-domain


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2022-11-02
      • 2022-01-03
      相关资源
      最近更新 更多