#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
это указывает на то, что сервер столкнулся с непредвиденным условием. Вы можете отладить свой код, чтобы проверить, возникает ли какое-либо исключение в вашем методе actiongetMenuRights
.
Ответ №2:
Попробуйте эти
-
Вы возвращаете пустую строку, если у пользователя нет сеанса.
jQuery
, начиная с 1.9, отклоняет пустые ответы. Ответом должно бытьnull
или{}
, а не пустая строка. Он также отклоняет неверно сформированнуюJSON
но маловероятную в этом случае, поскольку вы используете библиотеку для генерацииJSON
. -
Это может быть потому, что ваш возвращаемый тип
string
, таким образом,Content-Type
заголовок становитсяtext/plain
. Попробуйте использовать любой из этих
- Используйте
dataType: 'text json'
в вашемjQuery
вызове. Это подскажет jQuery обрабатывать текст какJSON
. - или возвращайте
JSON
вместоstring
из контроллера MVC, используяJsonResult
в качестве возвращаемого типа. Это должно привести к тому, чтоContent-Type
заголовку будет присвоено значениеapplication/json
.
Вот спецификация в деталях (см. dataType
)