1

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は文字列(エラー)と整数(成功)の両方を「成功」として評価します。

4

2 に答える 2

1

(isNan(parseFloat(html)))してみてはいかがでしょうか。

編集:

または、明確にするために「成功」​​を返さないのはなぜですか。

于 2009-08-16T22:25:01.943 に答える
1

isNanが機能するはずです。

于 2009-08-16T21:24:51.073 に答える