Estoy trabajando en un blog en angularJS y uso php para generar un json con datos de una base de datos. Mi función angular "obtener artículo" se ve así
$scope.getDetail = function() {
$http.get("php/blogGetArticle.php?id=2").success(function(json) {
$scope.jsonDetail = json;
alert("ok");
}).error(function() {
alert("error");
});
};
y mi php "blogGetArticle.php" se ve así.
<?php
$id = $_GET["id"];
$dbhost = "localhost";
$dbport = "5432";
$dbname = "pd";
$dbuser = "postgres";
$dbpass = "123";
$connect = pg_connect("host=" . $dbhost . " port=" . $dbport . " dbname=" . $dbname . " user=" . $dbuser . " password=" . $dbpass);
if(!$connect)
die("error 0"); // connect error
$query = "SELECT * FROM blog WHERE id=" . $id;
$result = pg_query($connect, $query);
if(!$result)
die("error 1"); // query error
$row = pg_fetch_row($result);
$json = "{";
$json .= ""id":"" . addslashes($row[0]) . "",";
$json .= ""title":"" . addslashes($row[1]) . "",";
$json .= ""message":"" . addslashes($row[2]) . "",";
$json .= ""category":"" . addslashes($row[4]) . """;
$json .= "}";
echo $json;
?>
Ahora lo que trato de hacer es tratar de hacer el ángulofunción llevar a la rama .error cuando llamo algo dentro de php .. No sé cómo explicar bien. Por ejemplo, cuando tengo en php una identificación que es inferior a 10, quiero que la función angular lance una excepción, pero quiero hacerlo desde un archivo php para lanzar esa excepción a la función angular.
¡Gracias, Daniel!
EDITAR: entonces, ¿cómo lanzo un error 4xx o 5xx?
Respuestas
2 para la respuesta № 1PHP:
try {
} catch (Exception $e) {
header("HTTP/1.1 500 Internal Server Error");
echo "{"data": "Exception occurred: ".$e->getMessage().""}";
}
AngularJS
, function(error) {
$log.error("Error message: "+error.data);
});
1 para la respuesta № 2
Puedes hacer como
if(!$connect)
// or may be code 500
header("HTTP/1.0 404 Not Found");
exit;
$query = "SELECT * FROM blog WHERE id=" . $id;
$result = pg_query($connect, $query);
if(!$result)
header("HTTP/1.0 404 Not Found");
exit;
Te aconsejo que pruebes http://us.php.net/manual/en/function.json-encode.php sin más preámbulos :)
Adiós
-1 para la respuesta № 3
¿No podrías devolver a json con un formato diferente?
if(!$result){
$json = "{";
$json .= ""error":"failed loading data",";
$json .= "}";
}else{
$row = pg_fetch_row($result);
$json = "{";
$json .= ""id":"" . addslashes($row[0]) . "",";
$json .= ""title":"" . addslashes($row[1]) . "",";
$json .= ""message":"" . addslashes($row[2]) . "",";
$json .= ""category":"" . addslashes($row[4]) . """;
$json .= "}";
}
echo $json;
Luego, en detección angular, si existe un error en json, puede planificar múltiples errores frente a procesos de llamadas de resultados de estado.
jsonObj.hasOwnProperty("error")