Определить Ajax вызывающий URL - PullRequest
9 голосов
/ 26 июня 2010

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

Ответы [ 4 ]

13 голосов
/ 27 июня 2010

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

if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
    // Ajax Request
}
2 голосов
/ 26 июня 2010

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

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

затем в content.php,

$sentFrom=$_SERVER['HTTP_X_SENT_FROM']; // outputs default.html
1 голос
/ 26 июня 2010

$_SERVER['HTTP_REFERER'] может быть тем, что вы хотите

Ссылки

0 голосов
/ 26 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...