0

Webサービスを使用して特定のレコードを削除しています。jquery ajaxリクエストは、ハイパーリンクのonclickで記述されます。ファイアバグを使用してスクリプトを1行ずつ実行すると、削除されます。それ以外の場合は削除されません。以前にこのような状況に遭遇した人はいますか?助けてください

コードサンプル:

 $(".target").click(function() { 
            func();  //This function should be executed completely before navigating to another page
        });


 var func = function() {
            var items = $("#flag").find('td input.itemClass');
            id = items[0].value;
            var status = items[1].value;
            var type = items[2].value;
            var params = '{' +
                            'ID:"' + id + '" ,Type:"' + type + '" ,Status:"' + status + '"}';
            $.ajax({
                type: "POST",
                url: "WebMethodService.asmx/DeleteItem",
                data: params,
                //contentType: "plain/text",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    $("#deleteNotificationMessage").val("Item has been removed"); // keep a separate label to display this message
                }

                //Event that'll be fired on Success

            });


    }
4

3 に答える 3

3

jQuery ajax 関数は遅延オブジェクトを返すため、return $.ajax. 次に、遅延を使用する必要があります。doneAJAX が完全に終了したときにコールバックを実行します。AJAX が の場合はdone、代わりに JS を使用して移動します。

var func = function() {
    ...
    return $.ajax({...});                   //return our ajax deferred
}

$(".target").click(function() { 
    var target = this;                      //preserve "this" since this in the callback may be different 
    func().done(function(){                 //our done callback executed when ajax is done
        window.location.href = target.href; //assuming .target is a link
    });
    return false;                           //prevent the natural click action
});
于 2012-05-07T10:13:44.230 に答える
0

async: falseそこで待機している ajax 呼び出しで を使用して、呼び出しを完了することができます。

var func = function() {
            var items = $("#flag").find('td input.itemClass');
            id = items[0].value;
            var status = items[1].value;
            var type = items[2].value;
            var params = '{' +
                            'ID:"' + id + '" ,Type:"' + type + '" ,Status:"' + status + '"}';
            $.ajax({
                type: "POST",
                async: false,
                url: "WebMethodService.asmx/DeleteItem",
                data: params,
                //contentType: "plain/text",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    $("#deleteNotificationMessage").val("Item has been removed"); // keep a separate label to display this message
                }

                //Event that'll be fired on Success

            });
    }

または、リクエスト後に送信することもできます。

$(".target").click(function() { 
            func();  //This function should be executed completely before navigating to another page
            return false;
        });

var func = function() {
            var items = $("#flag").find('td input.itemClass');
            id = items[0].value;
            var status = items[1].value;
            var type = items[2].value;
            var params = '{' +
                            'ID:"' + id + '" ,Type:"' + type + '" ,Status:"' + status + '"}';
            $.ajax({
                type: "POST",
                async: true,
                url: "WebMethodService.asmx/DeleteItem",
                data: params,
                //contentType: "plain/text",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    $("#deleteNotificationMessage").val("Item has been removed"); // keep a separate label to display this message
                    $("#YourFormID").submit();
                }

                //Event that'll be fired on Success

            });

    }
于 2012-05-07T10:15:55.620 に答える
0

Event を ajax リクエストの「success」ハンドラーに移動するだけです。

 $.ajax({
            type: "POST",
            url: "WebMethodService.asmx/DeleteItem",
            data: params,
            //contentType: "plain/text",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                $("#deleteNotificationMessage").val("Item has been removed");
                //Event that'll be fired on Success
            }              

        });

または、jQuery ajax コールバック メソッドを使用します。

于 2012-05-07T10:16:24.570 に答える