Мне нужен скрипт, который мог бы определить, вызван ли jquery
Если нет, то отобразится страница + макет, если нет, это будет просто для контента (но это не имеет значения)
Но да, способ обнаружения, если он был вызван загрузкой jquery – ajax – или напрямую запрошен.
Ура!
Не могли бы вы отправить параметр GET с нагрузкой?
То есть:
jquery=1 //(for load) jquery=2 //(for the 'low-level' ajax call)
Любое другое значение для нормальной загрузки скрипта
Затем вы разрешаете скрипту PHP определять, что делать дальше. Читая значение $_GET['jquery']
Возможно, вы захотите взглянуть на заголовки HTTP, которые получает ваш сервер.
Например, давайте рассмотрим, что у меня есть эта страница:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script> </head> <body> <div id="test"></div> <script type="text/javascript"> $('#test').load('temp.php'); </script> </body> </html>
И скрипт temp.php содержит только следующее:
<?php var_dump($_SERVER); die;
Когда load
выполняется, «test» <div>
будет содержать дамп $_SERVER
; и он будет включать это, среди прочего:
'HTTP_X_REQUESTED_WITH' => string 'XMLHttpRequest' (length=14)
XMLHttpRequest
– это объект, который используется для создания запроса Ajax.
Это означает, что вы должны иметь возможность определить, был ли запрос выполнен с помощью запроса AJax, с чем-то вроде этого:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { echo "Ajax"; } else { echo "Not Ajax"; }
При этом вы можете определить, называется ли ваша страница «нормально» или с помощью запроса Ajax, и решить, следует ли включать макет или нет.
BTW: это именно то решение, которое используется, например, Zend Framework, для обнаружения запросов Ajax .
Если я правильно помню, функции AJAX jQuery отправляют заголовок X-Requested-With
(со значением XMLHttpRequest
).
если вы используете Zend Framework, вы можете использовать
// in one of your controllers if ($this->getRequest()->isXmlHttpRequest()) { // ... }
http://framework.zend.com/manual/en/zend.controller.request.html