2

以下代碼應該在頁面加載後執行AJAX請求,然後在彈出窗口中顯示該AJAX調用的響應。這在Firefox中起作用,但我不知道爲什麼它在IE8中不起作用。Prototype的Ajax.Request和Internet Explorer 8

<html> 
<head> 
    <script type="text/javascript" src="js/prototype.js"></script> 
    <script type="text/javascript"> 
     // Do this stuff when DOM finishes loading. 
     document.observe("dom:loaded", function() { 
      new Ajax.Request("page.html", { 
       onSuccess: function(response) { 
        alert(response.responseText); 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
</body> 
</html> 

page.html中只包含

hello world 

我失去了一些東西明顯或這是原型JS庫不是與IE8完全兼容的結果?我用最新的穩定原型版本(1.6.0.3)和最新版本(1.6.1 RC3)嘗試了這個版本,但沒有運氣。任何幫助將不勝感激,謝謝!

回答

2

你在一個網站或使用文件做這個嗎?我能夠讓你的代碼在Visual Studio的網站上工作,但是當我從一個文件中嘗試它時,我得到了一個「拒絕訪問」的錯誤。由於IE8中的安全限制,我懷疑它無法對本地文件系統中的文件執行Ajax請求。

下面是我在Default.aspx頁面中用來加載page.htm文件的確切代碼。請注意,我更改了方法 - 因爲它不是表單 - 我添加了回調以查找失敗和異常。異常回調是通過本地文件觸發的。正如我所說,訪問同一網站中的頁面時,它工作正常。

<script type="text/javascript"> 
    document.observe('dom:loaded', function() { 
     new Ajax.Request("page.htm", { 
      method: 'get', 
      onSuccess: function(response) { 
       alert(response.responseText); 
      }, 
      onFailure: function(response) { 
       alert(response); 
      }, 
      onException: function(request,error) { 
       alert(error.message); 
      } 
     }); 
    }); 
</script> 
+0

這就是問題所在,非常感謝 – Matthew 2009-07-14 16:36:54

2

只是一個拋開現有的答案,只是想提一提,那IE8做了一些瘋狂的緩存當你使用「得到」在你的Ajax調用。我的web應用程序在FF中運行良好,但在IE8中,一些ajax調用從未製作過。我改變了方法:從'get'到'post',一切都很好。

method: 'post' 

此外,爲了進一步確保在IE8不好笑業務會話變量,把下面的meta標籤在HTML頁面的頭部。

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
+0

啊回想着這個舊的答案啊。在我的辯護中,我並沒有很好地理解當時獲得vs post的安寧觀念。 – Housty 2014-01-30 22:40:11