2009-09-04 16 views
6

Czy mimo to można sprawdzić, czy żądanie przychodzące jest typu AJAX JSON?PHP sprawdza, czy żądanie przychodzące to JSON typ

Próbowałem

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

Ale to nie działa.

Jakieś myśli?

+0

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

+0

Notatka , mime to application/json. – Dykam

Odpowiedz

11

Gdzie się przyjmowanie wniosków od dokładnie, że nie wiem?

Możesz mieć funkcję na początku skryptu, który próbuje zaimportować dane jako JSON lub simplexml. Jeśli wykryje błąd, wiesz, że to drugi ...

Po krótkiej analizie sprawdź, czy to JSON, simplexml spowoduje błąd z wielu powodów.

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

można zrobić test na param zaakceptować, jeśli jest to text/javascript Twój rozmowy json, jeśli jest to text/xml wiecie co: P

$ _SERVER [ 'HTTP_ACCEPT']

+0

Zakładasz, że program JavaScript ustawi nagłówki XMLHttpRequest poprawnie, co nigdy się nie kończy (kogo to obchodzi?). Zwykle skrypt po stronie serwera jest przeznaczony do odpowiedzi tylko w jednym formacie i nie widzę żadnego powodu, dla którego powinien być inny. – Havenard

+0

Jest to standardowa procedura, gdy żądasz jakiejś strony lub usługi (trafiając w adres URL), powinieneś określić, jakiego typu wyników oczekujesz w żądaniu. Pracowałem nad wieloma usługami sieciowymi, w których użytkownik oczekuje informacji w XML lub JSON, więc określają to w paramie żądania. poza tym muszą zapewnić rozszerzenie adresu URL, powiedzmy: somesite.com/get_user[.xml | .json]. Wiele liberalizacji, takich jak Jersey itp. W Javie, jQuery i kilka php niestandardowych bibliotek curl dołączają tę informację do nagłówka żądania (standardowy sposób komunikacji). w przeciwnym razie przekaż dodatkowe parametry w każdym żądaniu –

+1

Kiedy przeglądarka intintuje komunikację z usługą (lub adresem URL) dowolnej strony, określają one 'text/html', jQuery zestaw' application/json' w nagłówku żądania, jeśli typ danych jest ustawiony na json jak ' dataType: 'json'' i wyżej zmienna jest następująca: 'application/json, text/javascript, */*; q = 0.01' URL otwieranego przeglądarki wyświetli 'text/html, application/xhtml + xml, application/xml; q = 0.9, image/webp, */*; q = 0.8' –

0

Spróbuj json_decode ()

3

Możesz sprawdzić nagłówek X-Requested-With, niektóre biblioteki, takie jak jQuery ustawić na "XMLHttpRequest".

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

W twoim linku, jQuery używa ' X-Requested - Z "nie" X_REQUESTED_WITH ". Czy nie zrobilibyśmy '$ is_ajax = ($ _SERVER ['X-Requested-With'] == 'XMLHttpRequest');' zamiast? – Justin

6

Konieczne będzie ustawienie nagłówka od strony klienta. jQuery i innych bibliotek ustawić x-requested-with nagłówka:

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

zawsze można ustawić dodatkowy nagłówek określający to, lub użyć dowolnej zmiennej do wskazania żądań JSON.