Я использую AngularJS $ http.post для вызова PHP в моей логин-функции. PHP возвращает токен, а если не существует слова «ERROR».
PHP-код:
....
echo json_encode($token);
} else {
echo "ERROR";
}
Controller.js:
var request = $http({
method: "post",
url: constantService.url + 'login.php',
data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
request.success(function(response) {
$localstorage.set("token", JSON.stringify(response));
var showAlert = function() {
var alertPopup = $ionicPopup.alert({
title: ' successful token-based login',
template: response
});
alertPopup.then(function(res) {
console.log(res);
$state.go('home');
});
};
showAlert();
});
request.error(function(data, status, headers, config) {
console.log('An error occurred ');
var showAlert = function() {
var alertPopup = $ionicPopup.alert({
title: 'Error',
template: 'check your login credentials'
});
alertPopup.then(function(res) {
});
};
showAlert();
});
Когда я получить обратно правильный маркер, что он работает без проблем. Когда я вернусь слово «ERROR» (маркер не существует) я получаю следующую ошибку в хромированных инспекторах:
**SyntaxError: Unexpected token E**
at Object.parse (native)
at fromJson (http://localhost:8100/lib/ionic/js/ionic.bundle.js:9764:14)
at defaultHttpResponseTransform (http://localhost:8100/lib/ionic/js/ionic.bundle.js:17278:16)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:17363:12
at forEach (http://localhost:8100/lib/ionic/js/ionic.bundle.js:9022:20)
at transformData (http://localhost:8100/lib/ionic/js/ionic.bundle.js:17362:3)
at transformResponse (http://localhost:8100/lib/ionic/js/ionic.bundle.js:18088:23)
at processQueue (http://localhost:8100/lib/ionic/js/ionic.bundle.js:21888:27)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:21904:27
at Scope.$eval (http://localhost:8100/lib/ionic/js/ionic.bundle.js:23100:28)
Что правильный способ вернуть слово «ERROR» хэндл это в моем ответ. ошибка-функция? Является ли это проблемой кодирования/декодирования JSON? Пробовал все, чтобы решить эту проблему, но безуспешно. THX.
Ваш скрипт на стороне сервера должен будет вернуть код ошибки. Угловой не может знать, что ваша строка «ОШИБКА» является ошибкой, если указано, что запрос «200 OK». http://php.net/manual/en/function.http-response-code.php – JimL
Следует также отметить, что методы '.success (successFunc)' и '.error (errorFunc)' устарели. Вы должны использовать метод '.then()', который может просто принимать эти функции в качестве аргументов; то есть «.then (successFunc, errorFunc)». Функции выставляют только одну переменную, но эта переменная является объектом с ключами 'data',' status', 'headers',' config' и 'statusText' точно такими же, как те, которые отображаются' .success() 'и' .error() '. – BobChao87
ОК. Я понимаю. Как я могу заставить свой серверный скрипт возвращать код ошибки (или исправлять сообщение об ошибке), если токен не существует? Не могли бы вы привести здесь пример? thx –