Обнаружьте URL вызова Ajax

У меня есть документ 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' или другого документа вызова по мере необходимости?

9
задан Bill the Lizard 16 July 2010 в 16:53
поделиться

4 ответа

Большинство известных фреймворков Ajax, таких как jQuery и mooTools, добавляют специальный заголовок, который вы можете проверить с помощью PHP:

if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
    // Ajax Request
}
13
ответ дан 4 December 2019 в 12:59
поделиться

Невозможно просто определить, что запрос пришел от вызова 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 или нажатую ссылку), тогда проверка заголовка реферера поможет, как предлагает @ Джейми Вонг.

0
ответ дан 4 December 2019 в 12:59
поделиться

Думаю, лучше всего было бы установить заголовок запроса в вызове AJAX, например

st.setRequestHeader('X-Sent-From','default.html')

, затем в content.php,

$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
2
ответ дан 4 December 2019 в 12:59
поделиться

$ _ SERVER ['HTTP_REFERER'] может быть тем, что вам нужно

Ссылка

1
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: