2009-09-04 11 views
6

Gibt es trotzdem zu überprüfen, ob eine eingehende Anfrage von AJAX JSON Typ ist?PHP überprüfen, ob eingehende Anfrage ist JSON Typ

versuchte ich

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

Aber es hat nicht funktioniert.

Irgendwelche Gedanken?

+0

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

+0

Hinweis , der Pantomime ist Anwendung/Json. – Dykam

Antwort

11

Wo Sie Anfragen von, genau zu akzeptieren, dass Sie nicht wissen?

Sie könnten eine Funktion am Anfang des Skripts haben, die versucht, die Daten als JSON oder Simplexml zu importieren. Wenn es einen Fehler abfängt, weißt du, dass es der andere ist ...

Auf den zweiten Gedanken, es als JSON zu testen, wird Simplexml einen Fehler für viele Gründe werfen.

2

Sie eine Überprüfung der param akzeptieren tun können, wenn sie text/javascript Ihr Gespräch json ist, wenn es Text ist/xml erraten, was: P

$ _SERVER [ 'HTTP_ACCEPT']

+0

Sie gehen davon aus, dass das JavaScript-Programm die Header der XMLHttpRequest korrekt setzt, was nie gemacht wird (wen interessiert das?). Im Allgemeinen wird das serverseitige Skript nur in einem Format erstellt, und ich kann keinen Grund dafür finden, warum es anders sein sollte. – Havenard

+0

Es ist eine Standardprozedur, wenn Sie eine Seite oder einen Dienst anfordern (eine URL ankreuzen), Sie sollten angeben, welche Art von Ergebnis Sie in der Anfrage erwarten. Ich habe an vielen Webservices gearbeitet, bei denen Benutzer Informationen in XML oder JSON erwarten, so dass sie dies in request param angeben. Ansonsten müssen sie eine Erweiterung der URL anbieten, sagen wir somesite.com/get_user[.xml | .json]. Viele Liberalisierungen wie Jersey usw. in Java, jQuery und einige php custom curl-Bibliotheken hängen diese Information im Kopf der Anfrage an (Standard-Kommunikationsweg). andernfalls übergeben Sie extra Parameter in jeder Anfrage –

+1

Wenn der Browser die Kommunikation mit einem Site-Service (oder URL) anzeigt, geben sie 'text/html' an, jQuery legt 'application/json' im Anfrage-Header fest, wenn dataType auf json gesetzt ist wie' dataType: 'json'' und die obige Variable ist wie folgt 'application/json, text/javascript, */*; q = 0,01' Browser geöffnete URL zeigt 'text/html, application/xhtml + xml, application/xml; q = 0.9, image/webp, */*; q = 0.8' –

0

Try json_decode ()

3

Sie können die X-Requested-With Header überprüfen, einige Bibliotheken, wie jQuery setzen Sie es auf "XMLHttpRequest".

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

In Ihrem Link verwendet jQuery ' X-Requested-Mit 'nicht' X_REQUESTED_WITH '. Also würden wir nicht '$ is_ajax = ($ _SERVER ['X-Requested-With'] == 'XMLHttpRequest'); – Justin

6

Sie müssten eine Kopfzeile von der Clientseite aus festlegen. jQuery und anderen Bibliotheken setzen einen x-requested-with Header:

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

Sie können immer einen zusätzlichen Header festlegen, der das angibt, oder eine beliebige Variable verwenden, um JSON-Anforderungen anzugeben.

Verwandte Themen