успешный вызов ajax, не возвращающийся к успешной функции

#c# #jquery #ajax #asp.net-core #model-view-controller

#c# #jquery #ajax #asp.net-core #модель-представление-контроллер

Вопрос:

Я работаю над приложением .NET Core MVC, я добавил код JavaScript в частичном представлении, код JavaScript выполняет функцию контроллера, но не выполняет функцию успеха Ajax-вызова. Ниже приведен мой код JavaScript, код выполняется при загрузке страницы

 <script type="text/javascript">
        $(document).ready(function () {
            debugger;
            $.ajax({
                type: 'GET',
                url: '@Url.Action("getMenurights","Home")',
                dataType: 'json',
                contentType: "application/json; charset=utf-8",
                success: OnSuccessMenuRights,
                failure: function (data) {
                    alert(data);
                }

            });
            
        });
    </script>  

код контроллера:-

      public string getMenuRights()
     {
        string result = "";
        if (!string.IsNullOrEmpty(HttpContext.Session.GetString("UserId")as string))
        {

            Home objHome = new Home();
            DataTable dtMenuRights = new DataTable();
            dtMenuRights = objHome.GetMenuRights(HttpContext.Session.GetString("UserId").ToString());
            List<DataRow> MenuList = dtMenuRights.AsEnumerable().ToList();

            TempData["MenuRights"] = dtMenuRights;
            if (MenuList.Count > 0)
            {
                ViewBag.MenuList = MenuList;
            }
            TempData.Keep("MenuRights");
            //var x = TempData["MenuRights"];
            JsonSerializerSettings jss = 
            new JsonSerializerSettings { ReferenceLoopHandling =ReferenceLoopHandling.Ignore };
            result = JsonConvert.SerializeObject(dtMenuRights, Formatting.Indented, jss);
        
        }
        return resu<
    }
  

Комментарии:

1. Также поделитесь телом успешной функции. Кроме того, прежде всего, попробуйте написать функцию непосредственно в success, аналогично тому, как вы написали по ошибке. И проверьте, что поступает в данных ответа. Не используйте alert, вместо этого используйте console.log

2. Каков ваш код состояния? Что вы получаете данные функции id fail?

3. возможно, вы захотите проверить ошибку с помощью: error: function (jqXHR, textStatus, error) { errortext = ошибка jqXHR.responseText; alert(текст ошибки); } (Вместо «сбой: «)

4. я получаю null в строке ошибки, также статус — ошибка 500

Ответ №1:

не выполняется функция success вызова Ajax

Основываясь на вашем коде, мы можем обнаружить, что ваш метод action getMenuRights() возвращает обычную текстовую строку потребителю, вы можете изменить dataType параметр на 'text' , как показано ниже.

 $.ajax({
    type: 'GET',
    url: '@Url.Action("getMenurights","Home")',
    dataType: 'text',
    success: OnSuccessMenuRights,
    failure: function (data) {
        alert(data);
    }

});
  

Кроме того, чтобы устранить проблему, связанную с Ajax-запросом, вы можете попробовать проверить ответ на этот ajax-запрос, который вы сделали, на вкладке сети браузера F12 developer tool. И проверьте, нет ли чего-то неправильного в выполненном вами запросе (ошибка http 400) или на стороне сервера (ошибка http 500) и т.д.

Комментарии:

1. internal server error 500 это указывает на то, что сервер столкнулся с непредвиденным условием. Вы можете отладить свой код, чтобы проверить, возникает ли какое-либо исключение в вашем методе action getMenuRights .

Ответ №2:

Попробуйте эти

  1. Вы возвращаете пустую строку, если у пользователя нет сеанса. jQuery , начиная с 1.9, отклоняет пустые ответы. Ответом должно быть null или {} , а не пустая строка. Он также отклоняет неверно сформированную JSON но маловероятную в этом случае, поскольку вы используете библиотеку для генерации JSON .

  2. Это может быть потому, что ваш возвращаемый тип string , таким образом, Content-Type заголовок становится text/plain . Попробуйте использовать любой из этих

  • Используйте dataType: 'text json' в вашем jQuery вызове. Это подскажет jQuery обрабатывать текст как JSON .
  • или возвращайте JSON вместо string из контроллера MVC, используя JsonResult в качестве возвращаемого типа. Это должно привести к тому, что Content-Type заголовку будет присвоено значение application/json .

Вот спецификация в деталях (см. dataType )

https://api.jquery.com/Jquery.ajax/