Есть ли способ (в PHP) обнаружить, был ли скрипт вызван загрузкой jQuery или нет?

Мне нужен скрипт, который мог бы определить, вызван ли 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