2014-02-08 116 views
0

我不太清楚如何解釋這個,但即時通過試驗創建我自己的API。目前,通過執行cURL請求或jQuery AJAX請求可以很好地工作。自定義PHP「API」JSON響應jQuery

我的問題是我看到使用您指定要在jQuery對象的參數根的JSON響應其他API。用我的API,我必須指定我想在數據參數中使用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

如果我從AJAX請求我不要找回數據刪除的數據對象 - '$ _POST'攜帶您所需要的數據。所以,如果你刪除它,你如何獲得數據? –

回答

2

當您設置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 
} 
+0

很感謝你會檢查出來 –