Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE9&x2B;IE10 AJAX调用不起作用_Javascript_Jquery_Ajax_Internet Explorer - Fatal编程技术网

Javascript IE9&x2B;IE10 AJAX调用不起作用

Javascript IE9&x2B;IE10 AJAX调用不起作用,javascript,jquery,ajax,internet-explorer,Javascript,Jquery,Ajax,Internet Explorer,我收到报告说,我开发的一个网站没有在IE9和IE10中正常运行。尝试提交表单时出现问题: $("form[name='signIn']").submit(function(e) { var formData = new FormData($(this)[0]); e.preventDefault(); $( "#return_status_sign_in" ).empty(); $.ajax({ url: "<?= SITE_URL

我收到报告说,我开发的一个网站没有在IE9和IE10中正常运行。尝试提交表单时出现问题:

$("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
    });

});
$(“表单[name='signIn'])。提交(函数(e){
var formData=新formData($(此)[0]);
e、 预防默认值();
$(“#返回#状态#登录”).empty();
$.ajax({
url:“帐户/登录”,
类型:“POST”,
数据:formData,
async:false,
成功:功能(msg){
$('return#status_sign_in')。追加(msg);
},
cache:false,
contentType:false,
processData:false
});
});

以上内容在所有其他浏览器中通过AJAX提交表单,效果非常好。然而,在IE9和IE10中,页面刷新,POST数据在URL中显示为get变量。这是怎么回事?可能是e.preventDefault()吗;不是触发吗?如果是这样的话,还有什么替代方法呢?

正如我在评论中所说的,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 
        });
}

您可以通过从回调返回false来测试这一点。如果解决了这个问题,您可能需要执行
e.returnValue=false
,尽管我认为IE9+支持
preventDefault()
,但要做到诚实,您必须使用“xdomainrequest”。这是IE9和更低版本用来发出ajax请求的窗口对象。仔细阅读它们,因为有很多警告。他们只发送“纯文本”而不是JSON。你也可以发布你的html吗?IE9中不支持。那么使用什么来代替@Teemu