У меня есть документ HTML, который загружает содержание из файла PHP с помощью вызова Ajax. Важный бит моего кода ниже:
default.html:
/*more code above*/
var PHP_URL = "content.php";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
Для файла в 'content.php' действительно ли возможно обнаружить, что это назвали из 'default.html' или другого документа вызова по мере необходимости?
Большинство известных фреймворков Ajax, таких как jQuery и mooTools, добавляют специальный заголовок, который вы можете проверить с помощью PHP:
if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
// Ajax Request
}
Невозможно просто определить, что запрос пришел от вызова AJAX на сервере. Однако вы можете добавить параметр, который вы отправляете при запросе через AJAX, который указывает, что он исходит от вызова ajax.
Например:
/*more code above*/
var PHP_URL = "content.php?mode=AJAX";
var Content = document.getElementById('Content');
ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange =
function() {
if(ajaxRequest.readyState==4) {
if (ajaxRequest.status==200)
Content.innerHTML = ajaxRequest.responseText;
else
Content.innerHTML = "Error:<br/>unable to load page at <b>"+PHP_URL+"</b>";
Content.className = "Content Solid";
}
}
ajaxRequest.open("GET",PHP_URL,true);
ajaxRequest.send();
/*more code below*/
Если достаточно просто определить, что вызов поступил из default.html (и не различать вызов AJAX или нажатую ссылку), тогда проверка заголовка реферера поможет, как предлагает @ Джейми Вонг.
Думаю, лучше всего было бы установить заголовок запроса в вызове AJAX, например
st.setRequestHeader('X-Sent-From','default.html')
, затем в content.php,
$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
$ _ SERVER ['HTTP_REFERER']
может быть тем, что вам нужно
Ссылка