質問

iユーザーが選択した行のリストがあり、それらを1つずつ削除して、結果を最後に表示します。

明らかに単純なループを行い、ajax関数を呼び出すたびにループしますが、どのようにループし、成功したものと失敗したもの、すべて完了したかをどのように確認できますか?

どうしますか?一括編集/削除を行う適切な方法は何ですか?

役に立ちましたか?

解決

各ajaxリクエストにはオーバーヘッドが関連付けられます。サーバーがリクエストで過負荷になり、自分でDoSを実行します。また、すべてのブラウザーには、一度に実行できるHTTPリクエストの数に制限があるため、(ブラウザーに応じて)削除は、次々に実行するように指示した場合でも、一度にすべてではなく、突然発生します。

最良のオプションは、編集/削除する行をグループ化してJSON配列にし、1回のリクエストでサーバーに送信することです。サーバー上でJSONを解析し、それに応じてアイテムを削除できます。完了したら、結果を含むJSON配列を返します。

このjQuery擬似コードコードは、ネイティブの JSONオブジェクトを使用してブラウザーをターゲットにしていることを前提としています json2.js を使用しています。基本的に、このコードは「隠されたID」を探すだけです。ユーザーに表示するテーブルの各行のフィールドを配列に追加します。必要に応じて調整できます。

var recordsToDelete = [];
$("tr.myRow").each(function() {
    var id = $(this).find("input:hidden").val();
    recordsToDelete.push(id);
});
var json = JSON.stringify(recordsToDelete);

結果に対処するのは難しい場合があります。 (成功した場合)すべての行が削除されるようにシステムを設計する必要があります。非常に複雑なシステムを扱っている場合を除き、一部の行が成功し、一部の行が失敗するような状況は決してありません。この場合、システムアーキテクチャを再検討する必要があります。 jQueryには success および failure のイベントがありますリクエストの一般的な成功または失敗に対処するために使用できます。使用することをお勧めします。

上記のコードから続けて、これはレコードの削除を処理する1つの方法です。ここでは簡単にするために complete イベントを使用していますが、可能であれば success および failure イベントを使用する必要があります。リクエストが成功したか失敗したかにかかわらず、 complete イベントは常に発生します。

$.ajax({
    url: "http://stackoverflow.com/questions/1653127",        
    type: "POST", // Always use POST when deleting data
    data: { ids: json },
    complete: function(xhr, status) {
        var response = JSON.parse(xhr.responseXML);
        // Response will be an array of key/value
        // pairs indicating which rows succeeded or failed
        for (var i = 0; i < response.length; i++) {
            var recordID = response[i].recordID;
            var status = response[i].status;
            // Do stuff with the status codes here
        }
    }
});

コメントへの応答:

  • Gmailのようなアプリでは、動作方法が非常に複雑であるため、「Googleがこのように処理するため、このように処理します」と言うのは得策ではありません。 Googleで機能するすべてがすべての会社やWebサイトで機能するとは限りません。 Googleのような企業には、他のWebサイトをほとんど心配する必要がないという問題があります。しかし、あなたの質問に答えるために
    • これを確認するために確認しました。GMailはIDの配列を持つ1つのAJAXリクエストを使用します。個々のステータスコードは返されません。 (ここで推測しているように)Gmailは「アクションID」を返します。実行したアクションに対して、メールを削除した後に短時間表示される[元に戻す]リンクをクリックして、そのアクションを元に戻すことができます。
    • アプリで作業するときは、通常、操作が失敗しないように十分な信頼性を確保する必要があります。これを確認するには、厳密なQAを実行する必要があります。基本的に、削除操作は全体として成功または失敗するはずです。これが発生する可能性があるシナリオは、サーバーがダウンしたときにユーザーが[削除]をクリックした場合です。ユーザーにとっては、ページをリロードしていないため、サイトは引き続き稼働していますが、AJAXリクエストはどこにもアクセスできないため失敗します。このようなものを処理する必要があります。
    • アプリのビジネスルールに依存します。複数の人が同時にレコードを変更できる状況でアプリケーションを使用している場合(ほんの一例)、あるユーザーが削除しようとする何かが、その「削除」をクリックする直前に誰かによって削除された可能性があります。ボタン。ほとんどの場合、最初にレコードを削除した人は気にしません
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top