SyntaxError: Unexpected token S in JSON at position 17
SyntaxError: Unexpected token S in JSON at position 17
在产品保修登记中,JSON.parse()
有一个语法错误,但我找不到这个错误。这是我在 AngularJS 中做的第一个应用程序,通常我在 Java 中编程。我在 PHP 中开发了一个 API 来做后端,还有一个控制器在 API 和视图之间进行通信。
我的控制器:
function adicionarGarantiaCtrl(
$scope,
$rootScope,
constants,
connectServerFactory
ngDialog
) {
var METHOD_GET;
var METHOD_POST;
var URL_ADICIONAR_LINK_GARANTIA;
init();
function init() {
METHOD_GET = constants.METHOD_GET();
METHOD_POST = constants.METHOD_POST();
URL_ADICIONAR_LINK_GARANTIA = constants.URL_ADICIONAR_LINK_GARANTIA();
}
$scope.salvarGarantia = function() {
var salvar = {
"ano": $scope.add_ano,
"mes": $scope.add_mes,
"link": $scope.add_link,
"num_mes": $scope.add_nmes
};
console.log("TESTE adicionarGarantiaCtrl");
console.log(salvar);
connectServerFactory.conectar(
METHOD_POST,
URL_ADICIONAR_LINK_GARANTIA,
salvar,
function(data) {
console.log(data);
$rootScope.garantia_ano = data.ano;
$rootScope.garantia_mes = data.mes;
$rootScope.garantia_link = data.link;
$rootScope.garantia_num_mes = data.num_mes;
},
function(erro) {
console.log(erro);
}
);
ngDialog.close();
}
}
我的API..
function adicionar_garantia() {
$request = \Slim\Slim::getInstance()->request();
$garantia = json_decode($request->getBody());
$sql = "INSERT INTO garantia(" .
"garantia, troca_distribuidor, garantia_fabrica, garantia_antecipada" .
") VALUES (" .
":garantia, :troca_distribuidor, :garantia_fabrica, :garantia_antecipada" .
")";
try {
$db = getDB();
$stmt = $db->prepare($sql);
$stmt->bindParam("garantia", $garantia->garantia);
$stmt->bindParam("troca_distribuidor", $garantia->troca_distribuidor);
$stmt->bindParam("garantia_fabrica", $garantia->garantia_fabrica);
$stmt->bindParam("garantia_antecipada", $garantia->garantia_antecipada);
$stmt->execute();
$garantia->id_garantia = $db->lastInsertId();
$db = null;
echo json_encode($garantia);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
您在这里遇到的问题是 catch
块中的 JSON 没有引用消息。
以下行:
echo '{"error":{"text":'. $e->getMessage() .'}}';
应该变成:
echo '{"error":{"text":"'. $e->getMessage() .'"}}';
也许更好的选择是像您在 try catch
的 try
部分中那样继续使用 json_encode
函数。这(在我看来)更容易调试,也更容易阅读。
echo json_encode(array(
'error' => array(
'text' => $e->getMessage()
)
));
在产品保修登记中,JSON.parse()
有一个语法错误,但我找不到这个错误。这是我在 AngularJS 中做的第一个应用程序,通常我在 Java 中编程。我在 PHP 中开发了一个 API 来做后端,还有一个控制器在 API 和视图之间进行通信。
我的控制器:
function adicionarGarantiaCtrl(
$scope,
$rootScope,
constants,
connectServerFactory
ngDialog
) {
var METHOD_GET;
var METHOD_POST;
var URL_ADICIONAR_LINK_GARANTIA;
init();
function init() {
METHOD_GET = constants.METHOD_GET();
METHOD_POST = constants.METHOD_POST();
URL_ADICIONAR_LINK_GARANTIA = constants.URL_ADICIONAR_LINK_GARANTIA();
}
$scope.salvarGarantia = function() {
var salvar = {
"ano": $scope.add_ano,
"mes": $scope.add_mes,
"link": $scope.add_link,
"num_mes": $scope.add_nmes
};
console.log("TESTE adicionarGarantiaCtrl");
console.log(salvar);
connectServerFactory.conectar(
METHOD_POST,
URL_ADICIONAR_LINK_GARANTIA,
salvar,
function(data) {
console.log(data);
$rootScope.garantia_ano = data.ano;
$rootScope.garantia_mes = data.mes;
$rootScope.garantia_link = data.link;
$rootScope.garantia_num_mes = data.num_mes;
},
function(erro) {
console.log(erro);
}
);
ngDialog.close();
}
}
我的API..
function adicionar_garantia() {
$request = \Slim\Slim::getInstance()->request();
$garantia = json_decode($request->getBody());
$sql = "INSERT INTO garantia(" .
"garantia, troca_distribuidor, garantia_fabrica, garantia_antecipada" .
") VALUES (" .
":garantia, :troca_distribuidor, :garantia_fabrica, :garantia_antecipada" .
")";
try {
$db = getDB();
$stmt = $db->prepare($sql);
$stmt->bindParam("garantia", $garantia->garantia);
$stmt->bindParam("troca_distribuidor", $garantia->troca_distribuidor);
$stmt->bindParam("garantia_fabrica", $garantia->garantia_fabrica);
$stmt->bindParam("garantia_antecipada", $garantia->garantia_antecipada);
$stmt->execute();
$garantia->id_garantia = $db->lastInsertId();
$db = null;
echo json_encode($garantia);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
您在这里遇到的问题是 catch
块中的 JSON 没有引用消息。
以下行:
echo '{"error":{"text":'. $e->getMessage() .'}}';
应该变成:
echo '{"error":{"text":"'. $e->getMessage() .'"}}';
也许更好的选择是像您在 try catch
的 try
部分中那样继续使用 json_encode
函数。这(在我看来)更容易调试,也更容易阅读。
echo json_encode(array(
'error' => array(
'text' => $e->getMessage()
)
));