我有一个登录表单,用户可以输入usrname/password并单击此表单上的登录按钮向服务器发送请求。Ajax.Update不适用于IE 8
登录按钮调用一个名为submitLoginFormIntoDivAndReload的函数,函数submitLoginFormIntoDivAndReload调用另一个名为submitFormObjIntoDivAndReload的函数。
下面是这些功能的细节:
function submitLoginFormIntoDivAndReload(servletUrl, formObj, divId) {
//var formObj = document.getElementById(formId);
var shortUserName = formObj.shortusername.value;
alert("starting userName: " + shortUserName);
var organization = formObj.organization.value;
alert("organization: " + organization);
formObj.username.value = createLdapString(shortUserName, organization);
alert("ending userName: " + formObj.username.value);
var loggingInContent = "<table><tr><td width='600px' align='center'><p>logging in</p></td></tr></table>"
document.getElementById(divId).innerHTML = loggingInContent;
submitFormObjIntoDivAndReload(servletUrl, formObj, divId);
}
function submitFormObjIntoDivAndReload(url, formObj, divId) {
alert('Form object: ' + formObj);
alert('url: ' + url);
alert('divId: '+divId);
var myRequest = new Ajax.Updater(divId, url,
{ method: 'post',
parameters: Form.serialize(formObj),
onSuccess: function(reponse) {
window.location.reload();
}
});
alert("after update");
}
此代码工作完全在Firefox。但是,它不适用于IE。
在IE上,我可以得到所有警报(用于调试)。但是,Ajax.Updater似乎没有向服务器发送请求(我在服务器端看不到任何输出)。
关于FireFox,我可以得到所有的改变。我可以看到Ajax.Updater确实向服务器发送了请求,因为我可以在服务器端看到预期的输出。
我搜索了网上,有人说,IE浏览器有一个缓存的问题: Ajax updater not working in internet explorer 但似乎这个问题只为“GET”方法,而不是为“POST”方法。我正在使用“POST”方法。我还在表单中添加了一个假输入,但它仍然无效。
有人有什么想法吗?非常感谢你!
顺便说一句,我使用原型1.5.1。
为什么你使用这样一个旧版本的Prototype? 1.7已经出现一段时间了,并有很多改进。 – megaflop
我改为1.7。然后它在IE上工作过一次。但它不再起作用。这真的是缓存问题吗? – Jing
可能。您是否在每次尝试之前尝试清除浏览器的缓存?如果你能够,你能发送缓存预防头与服务器的回应? 'Cache-Control:no-cache,must-revalidate' and'Expires:Sat,26 Jul 1997 05:00:00 GMT'应该诀窍 – megaflop