IE9 + IE10 AJAX调用不起作用

时间:2015-03-23 17:47:19

标签: javascript jquery ajax internet-explorer

我收到的报告显示我开发的网站在IE 9和IE 10中运行不正常。尝试提交表单时出现问题:

$("form[name='signIn']").submit(function(e) {

    var formData = new FormData($(this)[0]);

    e.preventDefault();

    $( "#return_status_sign_in" ).empty();


    $.ajax({
        url: "<?= SITE_URL ?>account/login",
        type: "POST",
        data: formData,
        async: false,
        success: function (msg) {
            $('#return_status_sign_in').append(msg);
        },
        cache: false,
        contentType: false,
        processData: false
    });

});

以上在所有其他浏览器中通过AJAX提交表单并且工作正常。但是,在IE 9和10中,页面刷新,POST数据在URL中显示为get变量。怎么会发生这种情况?可能是e.preventDefault();是不是在触发?如果是这样,那替代方案是什么?

1 个答案:

答案 0 :(得分:-1)

正如我在评论中所述,IE 9使用'xdomainrequest'对象为其他请求发出跨域请求和'xmlhttprequest'。下面是我用来解决此问题的代码示例。 'xdomainrequests'只发送'普通/文本'。他们无法发送JSON:

if ('XDomainRequest' in window && window.XDomainRequest !== null) {
    var xdr = new XDomainRequest(),
        data = JSON.stringify(jsonData);

    xdr.open('POST', 'http://www.yourendpoint.com');
    xdr.onload = function() {
        // When data is recieved
    };
    // All of this below have to be present
    xdr.onprogress = function() {};
    xdr.ontimeout = function() {};
    xdr.onerror = function() {};

    // Send the request. If you do a post, this is how you send data
    xdr.send(data);
} else {
    $.ajax({
            url: 'http://www.yourendpoint.com',
            type: 'POST',
            dataType: 'json',
            data: {
                // your data to send
            },
            cache: true
        })
        .done(function(data) {
            // When done
        })
        .fail(function(data) {
           // When fail 
        });
}