2009-07-11 5 views
4

Comment Kohana détermine-t-il si une requête est une requête AJAX?Comment request :: is_ajax() fonctionne-t-il dans Kohana?

Y a-t-il quelque chose de différent dans la chaîne de référence? Ai-je besoin d'ajouter un paramètre GET, peut-être ?ajax=true?

+0

Oh mec, regardez dans la source! –

+0

En tant que Noob PHP, ce n'était pas si facile pour moi de savoir où il était dans la source (du moins quand j'ai posé la question). – alex

Répondre

8

Il vérifie si la requête est faite par XMLHttpRequest puisque la plupart des navigateurs envoient un en-tête dans ce cas avec cette indication: l'en-tête HTTP_X_REQUESTED_WITH sera mis à XMLHttpRequest.

+1

Ah, vous apprenez quelque chose de nouveau tous les jours! Merci! – alex

+0

D'après la réponse de Jonathan Sampson, il semblerait que ce n'est pas le navigateur, mais le cadre qui définit l'en-tête. – alex

+0

Eh bien .. l'en-tête est envoyé par le navigateur lorsque la demande est faite. Le framework ne sait pas si la requête a été faite via XMLHttpRequest ou un http GET normal si le client (navigateur) ne l'a pas indiqué. – txwikinger

5

Au v2.3.4

/** 
* Tests if the current request is an AJAX request by checking the 
* X-Requested-With HTTP request header that most popular JS frameworks 
* now set for AJAX calls. 
* 
* @return boolean 
*/ 

public static function is_ajax() 
{ 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
      strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest'); 
} 
1

Necro-affichage parce que cela est venu en premier ma recherche google. Dunno si Kohana fonctionne toujours de cette façon, mais l'utilisation de HTTP_X_REQUESTED_WITH n'est plus la meilleure pratique.

Les requêtes Ajax - toutes les requêtes HTTP en fait - devraient envoyer un en-tête "Accept".

Tout processus côté serveur doit examiner l'en-tête "Accept" pour déterminer le contenu à envoyer en réponse. Une façon de le faire en PHP est:

function is_ajax() { 
    return $_SERVER['HTTP_ACCEPT'] == 'application/json'; 
    } 
Questions connexes