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は、戻り値(1 =成功、文字列=エラー)に関係なく、常に「if」条件を表示します。
そこにいる天才がすぐに問題に気付くと思いますか?
編集-------ここにもう少し情報があります。スクリプトにコンソールログを追加して、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は文字列(エラー)と整数(成功)の両方を「成功」として評価します。