我有这个简单的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.