簡體   English   中英

Slim.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'];
});

但是,當我返回apiKey時,javascript中的警報顯示123123,但其他2個參數顯示了“意外令牌”,即使Chrome控制台中的響應顯示了正確的值。

使用$.ajaxdataType設置,您期望服務器的響應應該是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 )可以正常工作,因為它們是數字並且不需要雙引號。

進一步閱讀: MDN的JSON.parse()文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM