vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Почему PHP не определяет ajax запрос?

Добрый вечер. В интернете нашел пример определения ajax запроса средствами php

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    // Если к нам идёт Ajax запрос, то ловим его
    echo 'Это ajax запрос!';
    exit;
}
//Если это не ajax запрос
echo 'Это не ajax запрос!';


Данный код, соответственно не работает у меня (глобальные переменные, настройки php, апач и т.д. Я не знаю.)

На stackoverflow.com прочитал что данная переменная $servers формируется на основе заголовков и мол, ей нельзя доверять (ссылку на сайт с вопросом потерял.)

Предлагался вариант с $_GET['ajax'] и т.д.

Что меня больше всего интересует.

Соответственно придется 2 копии страницы делать, page1.php и page1ajax.php? Просто в случае ajax запроса, страница отдается jsone объектом.

Если считаете что можно в page1.php, определять запрос ajax это или не ajax запрос и соответственно отдавать нужный контент, появляются другие вопросы:
1) Использовать include(), тогда все равно придется делать 2 скрипта.
2) Если без include(), то стоит ли нагружать скрипт?

Решение: Всем спасибо! Просто оказалось, что я глупый. Ребята правильно про заголовки говорили. В js функции по отправки ajax запроса методом get, я не указал ни один заголовок.

var xhr = ajax._init();
		xhr.open("GET", encodeURI(url), true);
                >>>>>>>>>>>xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		xhr.send();
		xhr.onreadystatechange = function() {
  		if (xhr.readyState==4 && xhr.status==200) {
  			callback.call(xhr.responseText);
			}

Может кому поможет, все работает.
  • Вопрос задан
  • 3451 просмотр
Решения вопроса 2
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
На stackoverflow.com прочитал что данная переменная $servers формируется на основе заголовков и мол, ей нельзя доверять (ссылку на сайт с вопросом потерял.)

А вот разработчики Symfony - доверяют.

Вы посмотрите в отладчике браузера, уходит ли этот заголовок. Возможно это ваш клиентский код косячит - тогда править надо его.
И ещё посмотрите в отладчике PHP, что у вас там в заголовках творится.

UPD:
Будете делать ответ - не забудьте устанавливать в заголовках Content-Type в соответствующий тому формату, в котором отдаёте.
Ответ написан
Surzhikov
@Surzhikov
Разработчик
Почему две страницы? Можно обойтись одной.
Даете ему понять, какого типа данные он вам должен вернуть.
В ajax запросе передайте переменную (напр.: dataType). В ней указываете формат данных.

if($_POST['dataType']=="giveMeJSON"){
... собираете массив и формируете из него джейсон
}else{
... выводите данные в html (если вы это хотели)
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы