Prototype的Ajax.Updater实际上没有在IE7上更新

时间:2009-04-14 20:58:27

标签: php ajax caching internet-explorer-7 prototypejs

我正在尝试使用Ajax.Updater提交表单,并将更新结果更新为我页面中的div元素。

在IE6,FF3,Chrome和Opera中,一切都很棒。然而,在IE7中它偶尔会起作用,但通常情况下它似乎没有做任何事情。

这是javascript:

function testcaseHistoryUpdate(testcase, form) {
document.body.style.cursor = 'wait';
var param = Form.serialize(form);
new Ajax.Updater("content", "results/testcaseHistory/" + testcase, {
    onComplete: function(transport) {document.body.style.cursor = 'auto'}, 
    parameters: param,
    method: 'post'
    }
);
}

我已经使用alert()调用验证了param符合我的预期。

我已经在许多地方读过IE7高速缓存并且它可能是根本原因,但是在我的php响应中添加以下内容之后,它仍然不起作用。

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

为了进一步尝试修复缓存问题,我尝试添加一个伪随机参数,该参数只是填充了一个随机值,以便为每个调用设置不同的参数,但这没有帮助。

我还发现了this,其中UTF-8似乎导致了IE7的问题,但我的网页上有明显的标记:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

有没有人知道IE7会出现什么问题,而我测试的其他浏览器会导致这类问题?

6 个答案:

答案 0 :(得分:2)

您似乎无法对ie中的表单标记内的DOM id元素进行更新。有没有人找到解决这个问题的方法?当我将它移到form标签之外时,我的代码工作正常,当我只是注释掉form标签并且不移动DOM元素时。

答案 1 :(得分:1)

一个常见的问题似乎是extra comma problem。确保IE没有提供左下方的警报图标。我过去遇到了一些麻烦,因为IE没有验证我的javascript,它不会像我希望的那样运行。

答案 2 :(得分:1)

与AJAX问题无关,但在IE中,如果您尝试使用块级元素更新内联元素,则会引发错误。要测试这是否适用于您使用以下代码包装代码:

try {
// Your code
// something.update('...');
} catch(error) {
alert(error.descripton)
alert(error.number)
}

如果你得到错误-2146827687重新排列你的html,那么你用块级元素更新块级元素。

答案 3 :(得分:0)

我有完全相同的问题!

经过大量的试验和误操作后,我发现了什么 继续:

IE执行Ajax调用,处理PHP文件,但不执行 在屏幕上显示任何内容!

在PHP文件中没有“回显”或“打印”的内容显示在 div(target ='hidden-div),也不显示onComplete“alert” 屏幕!

但是,所有MySQL调用都在工作,我添加了一些代码来添加和/或 删除我的数据库上的一些foobar记录,它们都有效!

这可能是IE缓存问题吗?

答案 4 :(得分:0)

当然闻起来像是一个缓存问题。你是正确的IE7(和IE6)非常激烈地缓存,特别是AJAX调用,并且经常错误地忽略缓存控制头。

通常的解决方法是将“cachebuster”随机参数附加到URL (而不是作为附加的POST变量)。

答案 5 :(得分:0)

IE在缓存方面是愚蠢的。我有一个小'帮助'页面,没有完整的html / body等等。所以我不能放入我正常的反缓存内容。

URL var的想法虽然有效。

    var cacheBuster = parseInt(Math.random() * 99999999); // cache buster
    new Ajax.Updater(elementId, '/Helpers/PendingChanges.aspx?Cache=' + cacheBuster);

另外,我在IE8中收到了一个'未指定的错误',直到我添加了关于charset的行。