【问题标题】:Custom PHP "API" JSON response jQuery自定义 PHP“API”JSON 响应 jQuery
【发布时间】:2014-02-08 16:11:26
【问题描述】:

我不太清楚如何解释这一点,但我正在尝试创建自己的 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 中,我只能通过 $_POST 获取数据对象。如果我从 AJAX 请求中删除数据对象,我不会取回数据。那么我应该在 PHP 中做什么来获取“root”dataType 参数以知道返回 JSON?

<?php echo serialize($_POST) ?>

【问题讨论】:

  • 如果我从 AJAX 请求中删除了数据对象,我将无法取回数据 - $_POST 携带您需要的数据。那么如果你删除它,你怎么能得到数据呢?

标签: php jquery ajax json api


【解决方案1】:

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

在 PHP 方面,您可以使用 $_SERVER 超全局访问它:

$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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2017-03-24
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多