为什么我的功能在没有警报的情况下停止工作?

时间:2020-02-12 06:43:18

标签: c# jquery ajax asp.net-mvc

所以我认为此功能就在这里:

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();
        }

无论出于何种原因,如果我不添加最终警报(有评论的警报),则代码将无法工作。什么都不会删除,什么也不会报告给控制台。一旦添加了最终警报,它就会神奇地开始工作。

有人可以向我解释这种魔力吗?

3 个答案:

答案 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
}