Как получить GET запросы через XMLHttpRequest?

dredder

Кэп
Здравствуйте! Скажите в чём ошибка, почему переменная $_GET не отлавливается через мой AJAX запрос?

Объясните, пожалуйста, почему echo 'Я из аякса!'; не выводится в этом коде.
Файл index.php
PHP:
<?php
if (isset($_GET['name'])){
  echo 'Я из аякса! Меня зовут'.$_GET['name'].' '.$_GET['surname'];
}
?>

<!DOCTYPE HTML>
<html>

<head>
  <meta charset="utf-8">
</head>

<body>

<button onclick="loadAjax('Vasya', 'Pupkin')" id="button">Ловим GET</button>

<script>

  function loadAjax(name, surname) {
    var xhr = new XMLHttpRequest();

    var params = 'name=' + encodeURIComponent(name) +
            '&surname=' + encodeURIComponent(surname);

    xhr.open("GET", '/?' + params, true);

    xhr.send();
  }

</script>

</body>

</html>
У меня openserver 5.2.2 Захожу в логи -> Apache запросы, там
Код:
"GET /?name=Vasya&surname=Pupkin HTTP/1.1" 200 493 "http://hello.ru/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
Объясните, пожалуйста, как сделать так, чтобы я мог посылать через AJAX нужные мне GET либо POST переменные и выводить в ответ на них нужные мне данные и шаблоны
 

dredder

Кэп
И что не так? В JS с помощью AJAX я отправляю переменные методом GET, он отправляется на сервер и обрабатывается основным файлом. Почему php код в нём не исполняется?

К слову я понимаю, что html страницы будет заново отрисовываться, если запрос будет проходить в index.php в моём случае, но этого не происходит
 
Последнее редактирование:

dredder

Кэп
XMLHttpRequestВообще какая-то странная штука. Пишу код с помощью XMLHttpRequest. Вот index.php:

Код:
<script>
function loadAjax() {
  var xhr = new XMLHttpRequest();

  var params = 'q=1';

  xhr.open("GET", '/ajax.php?'+params, true);

  xhr.send(params);
}
</script>

<button onclick="loadAjax()" id="button">Ловим GET</button>
Вот файл ajax.php:
PHP:
if (isset($_GET['q'])){
    header("Content-type: text/txt; charset=UTF-8");
    echo 'Я из аякса! Меня зовут'.$_GET['q'];
}
Вот что вижу в логах
Код:
"GET /ajax.php?q=1 HTTP/1.1" 200 315 "http://hello.ru/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
А теперь пишу с помощью небольшой библиотеки:
Код:
<script>
function SendGet() {
  $$a({
    type:'get',
    url:'ajax.php',
    data:{'q':'1'},
    response:'text',
    success:function (data) {
      $$('result',$$('result').innerHTML+'<br />'+data);
    }
  });
}
</script>

<div onclick="SendGet();">Отправить GET запрос через Ajax</div><br />
Вот файл ajax.php:

Код:
if(isset($_GET['q'])) {
    header("Content-type: text/txt; charset=UTF-8");
    if($_GET['q']=='1') {
        echo 'запрос GET успешно обработан, q = 1';
    }
    else {
        echo 'карявый GET запрос';
    }
}
И ОН РАБОТАЕТ, echo 'запрос GET успешно обработан, q = 1'; выполняется.
А запрос при этом абсолютно такой же (логи смотрю в OpenServer 5.2.2)!!!
Код:
"GET /ajax.php?q=1 HTTP/1.1" 200 315 "http://hello.ru/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"
В чём проблема? Что не так вXMLHttpRequest?
 

Breeze

goshogun
Команда форума
Партнер клуба
Что не так вXMLHttpRequest?
С ним всё так, ибо именно он лежит внутри "небольшой библиотеки".
Не так с твоим пониманием как всё это работает.

Библиотека за тебя делает работу по получению ответа от сервера и пихает это в success.
В случае же прямого использования XMLHttpRequest ты делаешь запрос к серверу через xhr.send(params), а потом ты сам должен прочитать ответ и распечатать, но ты это не делаешь.
 

dredder

Кэп
С ним всё так, ибо именно он лежит внутри "небольшой библиотеки".
Не так с твоим пониманием как всё это работает.

Библиотека за тебя делает работу по получению ответа от сервера и пихает это в success.
В случае же прямого использования XMLHttpRequest ты делаешь запрос к серверу через xhr.send(params), а потом ты сам должен прочитать ответ и распечатать, но ты это не делаешь.
Да, до меня уже начало это доходить. А подскажите, как мне передать этот ответ передать с php?
Так не работает:

Код:
if (isset ($_GET['AjaxRequest']))
    {
       function outputText(){
       return 'Привет'. $_GET['catID'] .' '. $_GET['page'];
    }
    outputText();
}
А вот так ответ приходит:

Код:
if (isset ($_GET['AjaxRequest']))
{
    echo 'Привет'. $_GET['catID'] .' '. $_GET['page'];
 }
Через echo что ли формировать ответ? Или как это обычно делают?
 

dredder

Кэп
а ты как хотел?
ты делаешь запрос, у запроса должен быть результат, ради которого делается запрос
Спасибо за вашу помощь. Очень много спрашивал, но ваш ответ оказался самым толковым.
Я понял, что у нас на клиенте статичная страница, и она не работает как приложение на одном компьютере (спасибо @AnrDaemon за статью). Те запросы, которые мы шлём на сервер, они на нём исполняются и так там и остаются, а мы в свою очередь так и остаёмся со своей статичной html страничкой на клиенте
 

AnrDaemon

Продвинутый новичок
Ну, если очень грубо, то да.
Чтобы на странице что-то поменялось, ТЫ в своём коде НА КЛИЕНТЕ должен эти изменения произвести.
По результатам XmlHttpRequest ли, по велению левой пятки ли… Но без твоего участия и твоей команды ничего не произойдёт.
 
Сверху