Jquery AJAX POST到IE 7,处理响应

时间:2013-09-27 19:11:05

标签: jquery ajax internet-explorer internet-explorer-7 requirejs

我在这里已经阅读了很多不同的解决方案,但我无法解决任何问题。基本上,我使用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中运行。请参阅下面的答案。

2 个答案:

答案 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的原因。