Я выполнил запрос с помощью 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?
Возможно, я ошибаюсь, так как не знаю вашей структуры бэкэнд, но, насколько я помню, служба 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 и проверьте, не по-прежнему ли ошибка.
ionic start
.
error
используется, чтобы сообщать пользователю о любых ошибках в самой службе$http
или в бэкэнде. Теперь вы должны сообщить объекту$http
об ошибке, используя коды состояния HTTP ( restapitutorial .com / httpstatuscodes.html ). Теперь вы сказали мне, что jQuery работает; Можете ли вы показать нам немного своего бэкэнда? Я имею в виду, просто где вы делаете запрос потерпеть неудачу?Response.status(Status.BAD_REQUEST).entity(message).build();
, Параметрmessage
- это параметр, который я хотел бы получить.message
содержит ошибку входа в систему («неверный пароль»).