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