php中的JSON意外令牌


JSON unexpected token in Slim.php

我有这个简单的JSON请求

var jsonObject = {apiKey:'123123',method:'asdfsadfasdf',ip:'123.232.123.12'};
$.ajax({
    url: "http://api.example.com/users/add",
    type: "POST",
    data: jsonObject,
    dataType: "json",
    success: function (result) {
        switch (result) {
            case true:
                alert(result);
                break;
            default:
                break;
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    alert(thrownError);
    }
});

发送到精简API

$app->post('/add', function () use ($app) {
    $user =  $app->request->post() ;
    $ip = $user['ip'];
    $method = $user['method'];
    $apiKey = $user['apiKey'];
});

然而,在javascript中的警报显示123123,当我返回apiKey,但其他2个参数显示'意外令牌',即使在Chrome控制台的响应显示正确的值。

$.ajax中设置dataType,您期望来自服务器的响应应该是json有效的字符串。来自文档:

"json":将响应计算为json并返回JavaScript对象。[…JSON数据被严格解析;任何格式错误的JSON被拒绝,并抛出解析错误。

看起来你想返回你的参数。要做到这一点,只需以正确的方式打印数据(在JSON中编码):

$app->post('/users/add', function () use ($app) {
    $user =  $app->request->post() ;
    $ip = $user['ip'];
    $method = $user['method'];
    $apiKey = $user['apiKey'];
    echo json_encode($user);
});

现在您可以使用success $.ajax回调的result参数访问该数据。

好的,但是我想用我自己的方式打印数据

如果你愿意,你也可以直接打印字符串,使用双引号:

echo "'"$method'"";

你的json解析现在可以正常工作了。

数字(例如apiKey)工作没有问题,因为它们是数字,它们不需要双引号。

进一步阅读:JSON.parse()文档的MDN.