Javascript IE9&x2B;IE10 AJAX调用不起作用
我收到报告说,我开发的一个网站没有在IE9和IE10中正常运行。尝试提交表单时出现问题: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
$("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