Проблемы с функцией JQuery в asp.net?

Я написал функцию jQuery, которая вызывает метод c#.

Если функция возвращает успех, то она вызывает другой метод из кода c#, который отвечает за приращение переменной счетчика в моем классе c#.

Я хотел сделать автоматическое приращение счетчика каждую минуту, и это то, что я заметил. Я настроил точку останова в функции Counter () в своем классе c#. Когда страница загружается и вызывается метод Counter, я продолжаю отладку и замечаю, что все работает хорошо, но как только переменная counter достигает значения «2», Когда я нажимаю F10, чтобы войти в мой метод Counter (), он не достигает конца метода и увеличивает переменную counter на 2, а затем с этого момента все становится хуже.

Интересно, что я делаю не так? Может ли кто-нибудь просмотреть мой сценарий и дать мне предложения о том, что может быть причиной ошибки?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Dtata.aspx.cs" Inherits="Dtata" %>
  <!DOCTYPE html>

  <html >

  <head runat="server">
    <title></title>
    <script src="/scripts/jquery-3.1.1.min.js"></script>

  </head>

  <body>
    <form id="form1" runat="server">
      <div>
      </div>
      <script type="text/javascript">
        klm();

        function klm() {
          $.ajax({
            type: "POST",
            url: "Dtata.aspx/Hello",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: "{ 'name' : 'hello' }",
            success: function(result) {
              console.log(result.d);
              Counter() //<-- CALL OTHER AJAX METHOD TO INCREASE COUNTER ON BACK END
            },
            error: function(result) {
              alert(result.responseText);
            }
          });
        }


        function Counter() {
          $.ajax({
            type: "POST",
            url: "Dtata.aspx/Counter",
            contentType: "application/json; charset=utf-8",
            dataType: "json",

            success: function(result) {
              console.log(result.d);
            },
            error: function(result) {
              alert(result.responseText);
            }
          });
          setInterval(Counter, 60000);


        }
      </script>



    </form>


  </body>
  </html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Dtata: System.Web.UI.Page {
  public static int counter = 0;

  protected void Page_Load(object sender, EventArgs e) {


  }

  [WebMethod]
  public static string Hello(string name) {
    return name;
  }

  [WebMethod]
  public static int Counter() {
    counter = counter + 1;
    Console.WriteLine("I have been called" + counter);

    return counter;
  }
}

1 ответ

  1. Одна вещь. Вы вызываете счетчик в klm, а также в setInterval.

    Если вы хотите зациклить функцию AJAX, сделайте это:

    function Counter() {
      $.ajax({
        type: "POST",
        url: "Dtata.aspx/Counter",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    
        success: function(result) {
          console.log(result.d);
          setTimeout(Counter,60000); // call again if ok - or in .done
        },
        error: function(result) {
          alert(result.responseText);
        }
      });
    }
    

    Другое дело — я ожидал бы, что ваш C# будет читать и писать счетчик в БД, и я не вижу, чтобы C# возвращал какой-либо JSON с a { d:counter}