У меня есть документ 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, например
st.setRequestHeader('X-Sent-From','default.html')
затем в content.php,
$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
$_SERVER['HTTP_REFERER']
может быть тем, что вы хотите
Справка
Невозможно просто обнаружить, что запрос поступает от вызова 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 или щелкнув ссылку), тогда проверка заголовка Referrer сделает трюк, как это предлагает @Jamie Wong.