所以我认为此功能就在这里:
function izbrisi() {
var b = document.getElementById('proizvod').value;
{
$.ajax({
url: '@Url.Action("IzbrisiProizvod", "Proizvod")',
data: { id: b }
}).done(function () {
alert('Izbrisan');
});
alert('Izbrisan'); @* bez ovoga se ne brise proizvod *@
}
}
它传递给的控制器:
public ActionResult izbrisiProizvod(int Id)
{
RadniProizvod.IzbrisiProizvod(Id);
return View();
}
最后是“ IzbrisiProizvod”方法:
public void IzbrisiProizvod(int IdProizvoda)
{
Proizvod izbrisaniProizvod = azilEntities.Proizvods.FirstOrDefault(x => x.idProizvoda == IdProizvoda);
azilEntities.Proizvods.Remove(izbrisaniProizvod);
azilEntities.SaveChanges();
}
无论出于何种原因,如果我不添加最终警报(有评论的警报),则代码将无法工作。什么都不会删除,什么也不会报告给控制台。一旦添加了最终警报,它就会神奇地开始工作。
有人可以向我解释这种魔力吗?
答案 0 :(得分:1)
总是按照文档编写这样的jquery函数。 (始终是可选的)
// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax( "example.php" )
.done(function() {
alert( "success" );
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert( "error" );
})
.always(function() {
alert( "complete" );
});
所以在您的情况下:
function izbrisi() {
var b = document.getElementById('proizvod').value;
{
$.ajax({
url: '@Url.Action("IzbrisiProizvod", "Proizvod")',
data: { id: b }
}).done(function () {
alert('Izbrisan');
}).fail(function() {
alert( "error" );
}).always(function() {
alert( "complete" );
});
}
}
也许将警报更改为控制台日志或类似内容。
答案 1 :(得分:0)
无论出于何种原因,如果我不添加最终警报(有评论的警报),则代码将无法工作。什么都不会删除,什么也不会报告给控制台。一旦添加了最终警报,它就会神奇地开始工作。
您的Ajax仅包含.done()
Promise回调。仅当ajax请求收到200成功代码时,此命令才会执行。您可以在.fail()
承诺中添加唯一警报,以查看发生了什么情况。
在您的代码中,无论如何,都会发出最终警报。
尝试此操作以帮助查看发生了什么。使用此fiddle并同时打开控制台。请注意.done()
和.fail()
承诺中的不同警报消息。
//var b = document.getElementById('proizvod')?.value;
$.ajax({
url: '@Url.Action("IzbrisiProizvod", "Proizvod")',
data: {
id: 'someData'
}
}).done(function() {
alert('success');
}).fail(function() {
alert('error');
});
console.log('i fire no matter what');
答案 2 :(得分:0)
在浏览器开发工具中尝试使用网络工具。例如Firefox Dev Tools。单击元素(假设按钮)时,您应该在网络工具内所有请求的列表中看到新的http请求。如果您不这样做,那么您的ajax调用根本不会发生,或者它是在上一页发生的,因为您已经经历了页面重新加载。检查Proizvod是否实际删除。如果是这样,则您的js函数有效,但看不到响应。如果网络工具中有一个新的http请求,请对其进行一点检查以查看发生了什么(只需单击该请求,然后在右侧您将看到详细信息)。
此外,您可以打开控制台,然后单击控制台中的html元素类型:izbrisi()
。函数应该执行,并且如果起作用,您将在网络工具中看到一个新的http请求,并且将弹出done
的警报。如果是这种情况,则您的html元素在click事件上具有默认行为。因此,您应该阻止它,以防止页面重新加载。假设您使用一个按钮来单击它。 html按钮应如下所示:
<button onclick="izbrisi(e)">Izbrisi</button>
还有js函数:
function izbrisi(e) {
e.preventDefault();
// ... your code goes here
}