我有一个 JQuery/Ajax 更新。它在所有主要浏览器中都能正确更新,但是,处理错误响应在任何版本的 IE 中都不起作用。
下面是ajax提交代码:
$('.ajax_multi_submit').click(function (event) {
// if javascript is enabled, stop default post
event.preventDefault();
// get the id assigned to this form. This id will
// be added to every id to used in processing
var element = $(this);
var Id = element.attr("id");
var formUrl = $('#ajax_multi_form' + Id).attr('action');
$.ajax({
url: formUrl,
type: "POST",
dataType: "html",
data: $('#ajax_multi_form' + Id).serialize(),
beforeSend: function () {
showAjaxMultiBusy(Id);
},
complete: function () {},
success: function (html) {
processAjaxMultiForm(html, Id);
}
});
});
同样,我认为问题不在这里,因为所有浏览器都正确发布更新。但是,使用此代码处理结果时:
function processAjaxMultiForm(html, Id) {
$('#ajax_errors' + Id).hide('slow');
window.setTimeout(function () {
$('#ajax_busy' + Id).hide('slow');
if (parseFloat(html)) {
$('#ajax_message' + Id).html('Record Saved.').show('normal');
$('#ajax_message' + Id).hide('slow');
} else {
$('#ajax_errors' + Id).html(html).show('slow');
}
}, 1500);
}
当返回错误字符串而不是整数 ( parseFloat(html) = "some string..." ) 时,FF 和 Safari 会在 "else" 条件下正确显示错误。
IE 将始终显示“if”条件,无论返回值如何(1=成功,字符串=错误)。
我认为那里的一些天才会立即发现问题?
编辑-------这里有更多信息。我在脚本中添加了一个控制台日志以输出 html 变量。我得到一个正确的错误字符串,成功时得到一个“1”。我已根据以下建议将代码更新为:
function processAjaxMultiForm(html, Id) {
$('#ajax_errors' + Id).hide('slow');
window.setTimeout(function () {
$('#ajax_busy' + Id).hide('slow');
console.log("html is: " + html);
if (isNaN(html)) {
$('#ajax_errors' + Id).html(html).show('slow');
} else {
$('#ajax_message' + Id).html('Record Saved.').show('normal');
$('#ajax_message' + Id).hide('slow');
}
}, 1500);
}
和以前一样,在 FF Safari 中按预期工作,但 IE 将字符串(错误)和整数(成功)都评估为“成功”