0

コントローラー アクションにカテゴリを追加すると、JSON オブジェクトが返されます。

return Json(new { categoryName = category.Name, isPrimary = isPrim ? "1" : "-1", categoryId = categoryId }, JsonRequestBehavior.AllowGet);

JS ハンドラー関数で、ページに項目を追加します。

...
var totalLink = "<li style='color: #bbbbbb;'>" + result.categoryName + "<a class='removeCategoryButton' href='#lnk#'>remove</a></li>";

                            var lnk = '@Url.Action("RemoveCategoryFromLocation", "Location", new{locationId = Model.Location.TicketId,  categoryId=-1})';

                            totalLink = totalLink.replace('#lnk#', lnk);
                            totalLink = totalLink.replace('-1', result.categoryId);

                            $('#otherCategories').append(totalLink);
...

リンクの削除をクリックすると、次の関数が呼び出されます。

$(function () {
            $('.removeCategoryButton').click(function (event) {
                event.preventDefault();
                $.ajax({
                    url: this.href,
                    type: 'POST',
                    context: this,
                    success: function (result) {
                        if(result.categoryName == 1) {
                            $(this).closest('li').remove();
                        }
                    }
                });
                return false;
            });
        });

しかし、次のエラーが表示されます。

This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request. To allow GET requests, set JsonRequestBehavior to AllowGet.

このエラーは、アイテムを追加してページに追加した直後に削除したい場合にのみ発生します。ページを更新してリンクの削除をクリックすると、問題なく動作します。
上記のカテゴリからエラーが発生したときに注意してください削除されたので、呼び出しは何らかの理由でこのエラーをポップするだけで機能します。

4

1 に答える 1

1

削除リンクを動的に追加しているようですが.click、DOM の準備ができたときにイベント ハンドラーを 1 回だけサブスクライブしています。ですから、活発に行うようにしてください。.delegate()ただし、.live() メソッドは非推奨であるため、使用している jQuery のバージョンに応じて、またはいずれかの.on()メソッドを使用する必要があります。

そのため、jQuery の最新バージョンでは、以下を使用することをお勧めします.on()

$(document).on(イベント、セレクター、データ、ハンドラー);

$(document).on('click', '.removeCategoryButton', function () {
    $.ajax({
        url: this.href,
        type: 'POST',
        context: this,
        success: function (result) {
            if(result.categoryName == 1) {
                $(this).closest('li').remove();
            }
        }
    });
    return false;
});

document.readyこれをコールバックでラップする必要がなくなったことに注意してください。

于 2012-09-16T12:05:16.160 に答える