在服務器端(PHP),我使用json_encode對使用ajax請求(javascript - extjs)發送的數據進行編碼。json_encode錯誤處理PHP OOP
我想處理可能的json_encode錯誤,如果可能的話使用PHP OOP。
到目前爲止,我有下面的代碼,但我有一些困難(我在PHP的面向對象編程經驗的):
類ValidateJson
<?php
class ValidateJson {
private $errors = array();
// public static function validaJson(){
public function validaJson(){
//Get the last JSON error.
$jsonError = json_last_error();
//If this happen.
//if(is_null($decoded) && $jsonError == JSON_ERROR_NONE){
// $this->addJsonErrorMsg('Could not decode JSON!');
//}
switch ($jsonError) {
case JSON_ERROR_DEPTH:
$this->addJsonErrorMsg('Maximum stack depth exceeded');
break;
case JSON_ERROR_STATE_MISMATCH:
$this->addJsonErrorMsg('Underflow or the modes mismatch');
break;
case JSON_ERROR_CTRL_CHAR:
$this->addJsonErrorMsg('Unexpected control character found');
break;
case JSON_ERROR_SYNTAX:
$this->addJsonErrorMsg('Syntax error, malformed JSON');
break;
case JSON_ERROR_UTF8:
$this->addJsonErrorMsg('Malformed UTF-8 characters, possibly incorrectly encoded');
break;
default:
$this->addJsonErrorMsg(' Unknown error');
break;
}
}
private function addJsonErrorMsg($error_message){
$this->errors[] = $error_message;
}
public function outJsonError(){
return $this->errors;
}
// ?????
// if($jsonError != 0){
// throw "JSON Parse Error: " + untyped __call__("json_last_error_msg");
//
// }
}
?>
查詢和輸出:
<?php
require('conect.php');
$action = $_REQUEST['action'];
switch($action){
case "create":{
$records = $_POST['records'];
$data = json_decode(stripslashes($records));
require_once('validate_json.php');
$valida_json = new ValidateJson();
$valida_json->validaJson();
// $errosJson = $valida_json->outJsonError();
// echo $errors; exit; //return string 'Array'
if(json_last_error() == JSON_ERROR_NONE){
$cars = $data->{'cars'};
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$sqlQuery = "INSERT INTO the_cars (cars) VALUES (?)";
if($statement = $con->prepare($sqlQuery)){
$statement->bind_param("s", $cars);
$statement->execute();
$success= true;
}else{
$erro = $con->error;
$success = false;
}
echo json_encode(array(
"success" => $sucess,
'errors'=> $erro
));
$statement->close();
$conexao->close();
break;
}
}else{
$errorsJson = $valida_json->outJsonError();
$success = false;
echo json_encode(array(
"success" => $sucess,
'errorsjson'=> $errorsJson
));
}
}
?>
感謝Aknosis解決方案。我遵循你的建議。出於某種原因,在查詢中,$ valida_json-> validateJson();如果我插入$ errorsJson = $ valida_json-> outJsonError();其次是echo $ errorsJson;退出;,只是獲取數組字符串,而不是錯誤消息,addJsonErrorMsg函數中是否有錯誤?我的查詢代碼是用回描描述編輯的。 – josei
addJsonErrorMsg看起來不錯,但它返回一個數組。通過echo輸出數組發出通知「注意:數組到字符串轉換」。嘗試使用'var_dump($ errorsJson)'而不是'echo'。 – Aknosis
你有什麼建議可以解決這個問題嗎?我需要將錯誤消息發送給客戶端。看看json錯誤的情況,一次檢查多個錯誤的可能性似乎很小。在任何情況下,如果我通過將代碼更改爲private $ errors =''來刪除數組,和$ this-> errors = $ error_message;我正確地得到錯誤信息(但是以這種方式,它只能得到一個錯誤信息)。 – josei