Сомнения по поводу http метода AngularJS

0

Я выполнил запрос с помощью AngularJs, но когда мой сервер возвращает badrequest клиенту, данные параметра функции ошибки пустые.

$http({
  method: args.method,
  url: URL+'/'+args.url,
  data: JSON.stringify(args.data),
  headers : {
        'Content-Type': 'application/json'
},
responseType: 'json'
}).success(function(data, status, headers, config) {
    //
}).error(function(data, status, headers, config) {
    console.log(data);
    console.log(status);
    console.log(headers);
    console.log(config);
});

Но когда я использую запрос jquery, он работает.

$.ajax({
        url: URL+"/"+args.url,
        data: JSON.stringify(args.data),
        dataType: "json",
        contentType: "application/json",
        type: args.method})
    .done(function (data, textStatus, xhr) {
         ;
    })
    .fail(function(xhr, textStatus, thrownError) {
        if (xhr.status == 400) {
            console.log(xhr.responseText);
        }

    });

Выход JQuery Ajax:

тестирование

Как я могу получить возврат метода Post, когда сервер возвращает badrequest функцией angularJS?

  • 0
    Вы должны понимать, что обратный вызов error используется, чтобы сообщать пользователю о любых ошибках в самой службе $http или в бэкэнде. Теперь вы должны сообщить объекту $http об ошибке, используя коды состояния HTTP ( restapitutorial .com / httpstatuscodes.html ). Теперь вы сказали мне, что jQuery работает; Можете ли вы показать нам немного своего бэкэнда? Я имею в виду, просто где вы делаете запрос потерпеть неудачу?
  • 0
    Ты за твой ответ. Мой бэкэнд был построен на языке Java. Это мой бэкэнд, возвращающий Response.status(Status.BAD_REQUEST).entity(message).build(); , Параметр message - это параметр, который я хотел бы получить. message содержит ошибку входа в систему («неверный пароль»).
Показать ещё 2 комментария
Теги:
http
request

1 ответ

0

Возможно, я ошибаюсь, так как не знаю вашей структуры бэкэнд, но, насколько я помню, служба AngularJS $http не передает 4 параметра ни одному из обратных вызовов: он просто передает один.

Цитирование Угловая документация по $http:

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

Кроме того, документация продолжает определять объект response:

Объект ответа имеет следующие свойства:

data - {string|Object} - тело ответа, преобразованное функциями преобразования.

status - {number} - код статуса HTTP ответа.

headers - {function([headerName])} - Функция получения заголовка.

config - {Object} - объект конфигурации, который использовался для генерации запроса.

statusText - {string} - текст ответа HTTP-ответа.

Таким образом, одна из ошибок может заключаться в том, что вы не даете ей правильного обратного вызова; это очень тривиальная проблема в ванильном JavaScript, но я испытал это в прошлом как с Angular, так и с EmberJS.

Попробуйте получить status ответа для проверки, так как бэкэнд возвращает правильный код ответа на ошибку. Если это так, тогда возникает проблема с механизмом синтаксического анализа состояния в Angular.

Насколько я помню, было несколько таких случаев, но они были исправлены. Наконец, попробуйте использовать последнюю стабильную сборку AngularJS и проверьте, не по-прежнему ли ошибка.

  • 0
    Ты за твой ответ, но я уже прочитал документацию и попробовал их решение, но все равно не сработало. знак равно
  • 0
    Когда я использую метод jquery, он работает. Версия Angular Framework была загружена с помощью команды ionic start .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню