1

我在这里阅读了许多不同的解决方案,但我什么也做不了。基本上,我使用jQuery 表单插件来执行以下 POST。它完美地工作,并且所有正确alert的 s 都会触发,但是它总是重定向到响应。因此,如果我收到 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 中正常工作(包括抑制重定向)。除了它success在收到400时调用该方法。但它没有重定向。然后,我在 VM 中的本机 IE 7 上进行了测试,没有触发任何警报,它确实重定向了。

更新 2

对不起互联网...整个脚本没有在 IE 7 中运行。请在下面查看我的答案。

4

2 回答 2

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;
});
于 2013-09-27T19:15:33.470 回答
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错误时它仍然调用。

于 2013-09-27T21:16:14.910 回答