Ответ 1
Вызов ajax должен выглядеть так:
$.ajax({
type: "GET",
url: "/api/rooms",
success: function (rooms) {
}
});
Вы не применяете метод функции успеха, это одна из записей в словаре.
Я новичок в jQuery и использую небольшой старый учебник по node.js
который использует этот фрагмент:
$(function () {
var roomId;
$.ajax({
type: "GET",
url: "/api/rooms"
}).success(function (rooms) {
roomId = rooms[0].id;
getMessages();
$.each(rooms, function (key, room) {
var a = '<a href="#" data-room-id="' + room.id + '" class="room list-group-item">' + room.name + '</a>';
$("#rooms").append(a);
});
});
[...]
});
Однако я получаю эту ошибку
Uncaught TypeError: $.ajax(...). Успех не является функцией
at }).success(function (rooms) {
Мне интересно, что здесь может быть не так?
Вызов ajax должен выглядеть так:
$.ajax({
type: "GET",
url: "/api/rooms",
success: function (rooms) {
}
});
Вы не применяете метод функции успеха, это одна из записей в словаре.
Ваш код верен, с ним нет проблем
но вы можете включить новую библиотеку jquery, которая не позволяет использовать метод.success()
для более новой версии использования jquery
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$.ajax({
type: "GET",
url: "/api/rooms",
success: function (rooms) {
}
});
</script>
и если вы используете старый jquery, метод.success() будет работать без каких-либо проблем
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$.ajax({
url: "/api/rooms",
method: "GET",
data: {'datavar': datavalue}
}).success(function (rooms) {
console.log("successfully run ajax request..." + rooms);
}).done(function () {
console.log("I am from done function");
}).fail(function () {
console.log("I am from fail function.");
}).always(function () {
console.log("I am from always function");
});
</script>
Согласно документации
jqXHR.success()
обратного вызоваjqXHR.success()
,jqXHR.error()
иjqXHR.complete()
удаляются с jQuery 3.0.
jqXHR.done()
вы можете использоватьjqXHR.done()
,jqXHR.fail()
иjqXHR.always()
.
Эти методы были первоначально добавлены в jQuery $.ajax
качестве параметров обратных вызовов, которые будут использоваться как это
$.ajax({
url : 'mypage.php',
success : function() { ... },
error : function() { ... },
complete : function() { ... }
});
Однако из-за некоторой путаницы среди пользователей они позже также сопровождались цепными методами с одинаковыми именами
$.ajax().success( function() { ... })
.error( function() { ... })
.complete( function() { ... })
Эти методы были устаревшими с jQuery 1.8 и полностью удалены в jQuery 3.0 из-за использования объектов с отсрочкой, а затем и обещаний.
jqXHR.success()
, jqXHR.error()
и jqXHR.complete()
перенаправлены с помощью методов jqXHR.done()
, jqXHR.fail()
и jqXHR.always()
, связанных с jqXHR.always()
, варианты обратных вызовов параметров по-прежнему доступны теперь.
Начиная с jQuery 3.0, jQuery Отложенные объекты также совместимы с Promise/A+, что означает, что они "затемны" и могут использоваться с then()
$.ajax("/status").then(function(data) {
}).catch(function(error) {
});