2009-09-26 1 views
2

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

Если нет, то было бы отобразить страницу + макет, если нет, то он бы просто так содержание (но это не имеет значения)

Но да, способ обнаружения, если он был вызван загрузкой jquery - ajax - или напрямую запрошен.

Cheers!

ответ

6

Не могли бы вы отправить параметр GET с нагрузкой?

Ie:

jquery=1 //(for load) 

jquery=2 //(for the 'low-level' ajax call) 

Любое другое значение для нормальной нагрузки сценария

Тогда вы позволяете сделку PHP скрипт с определением того, что делать дальше. При считывании значения $_GET['jquery']

+0

Так что, если у меня есть сценарий, который говорит:. $ ("# actualcontent") нагрузка ($ (это). атр ("HREF")); Как бы добавить к этому дополнительный параметр переменной/GET? – Tom

+0

$ ("# actualcontent"). Load ($ (this) .attr ("href") + '?JQuery = 1'); –

+0

Отлично! Просто отлично. – Tom

6

Если я правильно помню, функции AJAX jQuery отправляют заголовок X-Requested-With (со значением XMLHttpRequest).

14

Возможно, вы захотите ознакомиться с заголовками 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 выполняется, "тест" <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, до detect Ajax requests.

+0

Первая строка может быть упрощена до if (@ $ _ SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { –

+3

@ Sbm007: Мне действительно не нравится «скрывать» ошибки с помощью оператора @ и использовать его только тогда, когда он trully needed - здесь, я хочу проверить, присутствует ли эта запись в $ _SERVER, и если ее значение является тем, что я хочу, и это именно то, что делает isset и второе условие. –

+0

О, ладно, честно, я не знал об этом. Я думал, что это одно и то же. Благодарю. –

Смежные вопросы