我有一个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将字符串(错误)和整数(成功)评估为“成功”