当我在控制器操作中添加类别时,我返回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.
仅当我添加项目并希望在页面上添加后立即将其删除时,才会发生此错误。如果我刷新页面并点击删除链接,它可以正常工作
只是要注意当我从上面的类别中得到错误被删除,所以调用它只是出于某种原因弹出这个错误。
答案 0 :(得分:1)
您似乎是动态添加删除链接,但是在DOM准备就绪时,您只订阅了.click
事件处理程序一次。因此,请确保在lively manner中执行此操作。但由于不推荐使用.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
回调中。