Détecter une requête AJAX en PHP
<p>Dernièrement j'ai été confronté à une difficulté.</p>
<p>Dans l'un de mes sites je devais installer une visionneuse de pages en Ajax. Seul souci: La page appelée devait comporter certains éléments quand elle était appelée par ajax mais en comporter d'autres si on l'ouvrait par sun Url dirrecte ou dans un nouvel onglet.</p>
<p>après avoir galéré pas mal de temps sur Google pour trouver une réponse, j'ai enfin trouvé quelque chose d'intéressant.</p>
<h2>Comment détecter si une page est ouverte suite à une requête Ajax ou pas?</h2>
<p>Pour le coup, ce qui est souvent le plus difficile, c'est de trouver les bons mots clés à taper dans les moteurs de recherche. en effet, c'était la première fois que j'étais confronté à ce langage (Ajax) et j'ai pas mal tatonné avant de trouver ce qui me servait.</p>
<p>La solution, je l'ai trouvée sur un blog, et elle réside en ça:</p>
<p>Pour détecter si une requête est issue d'un appel AJAX</p>
<div class="line number1 index0 alt2" style="font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; color: rgb(122, 122, 122); margin: 0px !important; padding: 0px 1em !important; border: 0px !important; outline: 0px !important; vertical-align: baseline !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; direction: ltr !important; white-space: pre !important;"><code class="php keyword" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; direction: ltr !important; display: inline !important; color: rgb(0, 102, 153) !important;">if</code> <code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">(isset(</code><code class="php variable" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: rgb(170, 119, 0) !important;">$_SERVER</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">[</code><code class="php string" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: blue !important;">'HTTP_X_REQUESTED_WITH'</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">]) && </code><code class="php functions" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: rgb(255, 20, 147) !important;">strtolower</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">(</code><code class="php variable" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: rgb(170, 119, 0) !important;">$_SERVER</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">[</code><code class="php string" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: blue !important;">'HTTP_X_REQUESTED_WITH'</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">]) == </code><code class="php string" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: blue !important;">'xmlhttprequest'</code><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">) {</code></div>
<div class="line number2 index1 alt1" style="font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; color: rgb(122, 122, 122); margin: 0px !important; padding: 0px 1em !important; border: 0px !important; outline: 0px !important; vertical-align: baseline !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; direction: ltr !important; white-space: pre !important;"><code class="php comments" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: rgb(0, 130, 0) !important;">// Traitement pour une requête AJAX</code></div>
<div class="line number2 index1 alt1" style="font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; color: rgb(122, 122, 122); margin: 0px !important; padding: 0px 1em !important; border: 0px !important; outline: 0px !important; vertical-align: baseline !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; direction: ltr !important; white-space: pre !important;"><span style="color:#0000FF;">$jesuisajax </span><span style="color:#000000;">=</span> <span style="color:#FF0000;">'oui'</span><span style="color:#000000;">;</span></div>
<div class="line number3 index2 alt2" style="font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; color: rgb(122, 122, 122); margin: 0px !important; padding: 0px 1em !important; border: 0px !important; outline: 0px !important; vertical-align: baseline !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; direction: ltr !important; white-space: pre !important;"><code class="php plain" style="margin: 0px !important; padding: 0px !important; border: 0px !important; outline: 0px !important; font-size: 1em !important; vertical-align: baseline !important; background: none !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; direction: ltr !important; display: inline !important; color: black !important;">}</code></div>
<div class="line number3 index2 alt2" style="font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; color: rgb(122, 122, 122); margin: 0px !important; padding: 0px 1em !important; border: 0px !important; outline: 0px !important; vertical-align: baseline !important; background-image: none !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; border-radius: 0px !important; inset: auto !important; float: none !important; height: auto !important; line-height: 1.1em !important; overflow: visible !important; position: static !important; width: auto !important; box-sizing: content-box !important; direction: ltr !important; white-space: pre !important;"> </div>
<h2>Comment utiliser ce code de détection de requête AJAX?</h2>
<p>Et bien c'est simple. Placé en tout début de votre fichier php (en tête de votre site), le if(....) détecte si la requête est le résultat d'une requête Ajax. Si c'est le cas, on crée une variable que j'ai appelé <span style="color: rgb(0, 0, 255); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; white-space: pre;">$jesuisajax </span>et qui prend la valeur "<span style="color:#FF0000;">oui</span>". Bien entendu, on aurait pu appeler la variable de n'importe quelle façon, et lui donner la valeur <span style="color:#FF0000;">1</span> par exemple. </p>
<p>Pour la suite, il suffit de détecter cette variable aux endroits nécessaires avec, par exemple:</p>
<div><span style="color:#008000;">if </span>( <span style="color:#0000FF;">$jesuisajax</span> == <span style="color:#FF0000;">'oui' </span>) {</div>
<div><span style="color:#008000;">echo </span><span style="color:#FF0000;">'Tout ce que je veux faire apparaitre suite à une requête AJAX'</span>;</div>
<div>}<span style="color:#008000;">else</span>{</div>
<div><span style="color:#008000;">echo </span><span style="color:#FF0000;">'Tout ce que je veux faire apparaitrequand il n'y a PAS de requête AJAX'</span>;</div>
<div>}</div>
<div> </div>
Sujet écrit par Limporia le samedi 28 mai 2022 à 08:38