2011-08-24 63 views
0

我在我的應用程序中的一個js文件中有這樣的聲明,該聲明在開始時加載每次在ajax請求後檢查會話超時。ajaxSetup在使用CDN時給出錯誤

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

如果您正在向不同於您的文檔的域請求ajax調用,那麼「是」,這將是跨域安全性的問題。如果您的CDN與ajax調用所在的服務器域完全不同,那麼如果您的主HTML頁面放在CDN上,則可能會導致相同的來源問題。

本文檔描述了Same Origin Policy,並針對具有公共根域的不同子域提供瞭解決方法。這是解決CDN問題的一種方法,但它需要將CDN作爲根域的子域,而不是完全獨立的根域。

切換到CDN時,您必須確保任何相對路徑仍然正確。 getScript()可以從任何域加載。它不受同一起源的限制,但如果您使用相對路徑並且已更改根路徑,則必須確保所有使用相對路徑的事件都在CDN上或切換到絕對路徑。

+0

getScript將工作得很好跨域。 –

相關問題