2009-09-04 38 views
6

有无论如何检查传入请求是否是AJAX JSON类型?PHP检查传入请求是否是JSON类型

我试图

if(($_SERVER['REQUEST_METHOD']=='JSON')) 
{ 
} 

但没有奏效。

有什么想法?

+0

http://stackoverflow.com/questions/1322863/what-is-the-best-way-inside-a-controller-to-know-if-the-request-is-a-xmlhttp-on – bobince 2009-09-04 09:10:32

+0

注意,mime是application/json。 – Dykam 2009-09-04 09:30:48

回答

11

你是哪里,就是这样,你不知道接受请求?

您可以在脚本的开头尝试将数据导入为JSON或simplexml。如果它发现一个错误,你知道它是另一个...

第二个想法,它测试它是JSON,simplexml将抛出一个错误,原因很多。

$json_request = (json_decode($request) != NULL) ? true : false; 
2

你可以在接受PARAM检查,如果它的文本/ JavaScript的你说话的JSON,如果它的文本/ xml的猜测:P

$ _ SERVER [ 'HTTP_ACCEPT']

+0

假设JavaScript程序将正确设置XMLHttpRequest的标题,这是从来没有做过的(谁在乎?)。一般来说,服务器端脚本只能以一种格式回答,而我看不出有什么不同的原因。 – Havenard 2009-09-04 06:42:59

+0

当您请求某个页面或服务(点击URL)时,它是一个标准过程,您应该指定您在请求中预期的结果类型。我曾经在许多Web服务上工作,用户期望XML或JSON中的信息,以便在请求参数中指定它。其他明智的是,他们必须提供URL的扩展名,比如说说 somesite.com/get_user[.xml |以.json。许多自由职业者,如泽西等在Java中,jQuery和几个PHP自定义卷发库都附加在请求(标准的通信方式)标题中的这些信息。在每个请求中传递额外的参数 – 2015-01-27 17:56:22

+1

当浏览器使用任何站点的服务(或URL)进行通信时,他们会指定'text/html',如果dataType设置为json,jQuery会在请求头中设置'application/json', dataType:'json''及以上变量如下 'application/json,text/javascript,*/*; q = 0.01' 浏览器打开的URL将显示 'text/html,application/xhtml + xml,application/xml; q = 0.9,image/webp,*/*; q = 0.8' – 2015-01-27 18:00:55

0

尝试json_decode( )

3

您可以检查X-Requested-With标题,某些库,如jQuery将其设置为"XMLHttpRequest"

$isAjaxRequest = $_SERVER['X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
+0

在你的链接中, X请求 - 使用'不'X_REQUESTED_WITH'。所以我们不会'$ is_ajax =($ _SERVER ['X-Requested-With'] =='XMLHttpRequest');'而不是? – Justin 2013-05-07 20:02:03

6

您需要从客户端设置标题。 jQuery和其他图书馆设置x-requested-with标题:

if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
{ 
    echo "Ajax request"; 
} 
0

你总是可以设置一个额外的头指定,或使用任意的变量来表示JSON请求。