【问题标题】:SyntaxError: Unexpected token S in JSON at position 17SyntaxError:JSON 中第 17 位的意外标记 S
【发布时间】:2018-08-30 15:45:33
【问题描述】:

在产品保修注册中,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() .'}}';
    }
}

【问题讨论】:

  • 检查开发者控制台中的网络响应选项卡。您没有从 PHP 脚本中得到预期的响应。
  • 你需要将$e->getMessage()字符串用引号括起来,'{"error":{"text":'. $e->getMessage() .'}}'应该是'{"error":{"text":"'. $e->getMessage() .'"}}'
  • Scagood 它运行良好,它返回了我的 sql 中的错误,我已经解决了它。非常感谢。
  • 回复帖子,我会解决的。

标签: javascript php angularjs json backend


【解决方案1】:

您在这里遇到的问题是 catch 块中的 JSON 没有引用该消息。 以下行:

echo '{"error":{"text":'. $e->getMessage() .'}}';

应该变成:

echo '{"error":{"text":"'. $e->getMessage() .'"}}';

也许更好的选择是继续使用json_encode 函数,就像您在try catchtry 部分中所做的那样。这既(在我看来)更容易调试,也更容易阅读。

echo json_encode(array(
    'error' => array(
        'text' => $e->getMessage()
    )
));

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2016-10-22
    • 2017-08-21
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多