我不太确定如何解释这个但是我正在尝试创建自己的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) ?>
答案 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
}