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 准备好时,您只订阅了一次事件处理程序。因此,请确保您以活泼的方式进行操作。但是由于不推荐使用 .live() 方法,根据您使用的 jQuery 版本,您应该使用其中一个.delegate().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 回答