自定义PHP“API”JSON响应jQuery

时间:2014-02-08 16:11:27

标签: php jquery ajax json api

我不太确定如何解释这个但是我正在尝试创建自己的API。目前通过执行cURL请求或jQuery AJAX请求,事情进展顺利。

我的问题是我看到使用您指定的其他API,您希望在jQuery对象的参数根目录中使用JSON响应。使用我的API,我必须在data参数中指定我想要一个JSON响应。 API如何获取此JSON参数?例如:

$.ajax({
    url: 'url',
    type: 'POST',
    data: {dataType : 'json'}, //I need this for PHP to know I want a JSON response
    dataType: 'json' //how do other APIs grab this on the API side?
}).
done(function(response){
    console.log(response);
});

在PHP中我只能拾取数据对象VIA $ _POST。如果我从AJAX请求中删除数据对象,我就不会得到数据。那么我应该如何在PHP中获取“root”dataType参数以了解返回JSON?

<?php echo serialize($_POST) ?>

1 个答案:

答案 0 :(得分:2)

当你设置dataType时,jQuery会将该信息作为Accept标题的一部分发送,它可能看起来像这样:Accept: application/json, text/javascript, */*; q=0.01

在PHP方面,您可以使用$_SERVER superglobal:

访问它
$accept = isset($_SERVER['HTTP_ACCEPT']) ? $_SERVER['HTTP_ACCEPT'] : null;
if ($accept && false !== stripos($accept, 'application/json')) {
    // send back JSON
}

如果你碰巧使用Symfony的HttpFoundation组件,它有一些很好的工具来处理Accept标题:

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\AcceptHeader;

$r = Request::createFromGlobals();
$accept = AcceptHeader::fromString($r->headers->get('Accept') ?: '*/*');
if ($accept->has('application/json')) {
    // send json
} elseif ($accept->has('application/xml')) {
    // send xml
} else {
    // send whatever
}