我在这里已经阅读了很多不同的解决方案,但我无法解决任何问题。基本上,我使用jQuery form plugin来执行以下POST。它完美无缺,并且所有正确的alert
都可以解雇,但始终重定向到响应。因此,如果我得到200个HTML响应,它将显示它并删除表单页面。与400相同会显示IE 7的400错误页面。为了防止这种重定向,我错过了什么?
var $form = $("#myform");
$form.submit(function(e) {
e.preventDefault ? e.preventDefault() : e.returnValue = false;
$form.ajaxSubmit({
type: $form.attr('method'),
url: $form.attr('action'),
beforeSend: function(xhr, settings) {
alert("sending");
},
success: function(data, status) {
alert("success");
},
error: function(data, status) {
alert("error");
}
});
return false;
});
更新
我说的不对。警报不会触发。希望这会有所帮助。在IE 7模式下运行的IE 10中,警报被触发并且正常工作(包括抑制重定向)。除了它在接收400时调用success
方法这一事实,但它没有重定向。然后,我在VM中对本机IE 7进行了测试,并且没有发出警报,并且确实重定向。
更新2
对于互联网抱歉...整个脚本没有在IE 7中运行。请参阅下面的答案。
答案 0 :(得分:1)
尝试将return false;
添加到事件挂钩的末尾;某些浏览器不能正确支持preventDefault()
,并期望显式false
返回值。
var $form = $("#myform");
$form.submit(function(e) {
$form.ajaxSubmit({
type: $form.attr('method'),
url: $form.attr('action'),
beforeSend: function(xhr, settings) {
alert("sending");
},
success: function(data, status) {
alert("success");
},
error: function(data, status) {
alert("error");
}
});
e.preventDefault ? e.preventDefault() : e.returnValue = false;
return false;
});
答案 1 :(得分:1)
我正在使用requirejs来加载我的脚本,由于某些原因,domReady!模块因为!
而阻止脚本加载到IE 7中。所以包含上面的代码是这样的:
define(['domReady!', 'jquery.form'], function() {
//code from question
});
我将此更改为以下内容,它开始起作用:
define(['domReady', 'jquery.form'], function(ready) {
ready(function() {
//code from question
});
});
现在我只需弄清楚当服务器发回success
错误时它仍会调用400
的原因。