我收到的报告显示我开发的网站在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();是不是在触发?如果是这样,那替代方案是什么?
答案 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
});
}