Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
ProCode
33 / 33 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
1

Пример простейшего калькулятора на PHP без перезагрузки страницы (чистый Ajax, без jQuery и других библиотек)

30.01.2017, 16:42. Просмотров 3263. Ответов 6
Метки нет (Все метки)

Привет. Это, в каком-то смысле, продолжение креатива Исполнение PHP-скрипта без перезагрузки страницы и без знания JavaScript(!) - Xajax но здесь я решил не использовать сторонние библиотеки вовсе, а сделать образец "чистого" Ajax для тех, кто только начинает знакомиться с этой технологией.

Это наверное самый простой образец применения Ajax из возможных Скрипт принимает от пользователя 2 числа, и выводит ему их вычисленную сумму. И всё это - без перезагрузки страницы. Пример работы скрипта можно увидеть здесь:
 Комментарий модератора 
Запрещено размещать ссылки с целью рекламы ресурсов и услуг


Скрипт состоит из двух файлов: ajax.php и ajax.html которые лежат в одной папке. Вот содержимое ajax.php:

PHP
1
2
3
<?php
 
echo $_POST["x"] + $_POST["y"];
Всё более чем просто, не так ли? -) На сервер приходит POST-запрос с данными. Скрипт складывает две переменных из этого запроса, и отправляет полученную сумму обратно, в поток вывода.

Теперь посмотрим на код, который делает этот самый POST-запрос (файл, ajax.html):

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">
 
  function calculate() {
 
    var x = document.getElementById('x').value; // получить значение поля 'x' из формы
    var y = document.getElementById('y').value; // получить значение поля 'y' из формы
    var ajaxObject = new XMLHttpRequest(); // создать новый объект XMLHttpRequest
    ajaxObject.open('POST', 'ajax.php'); // открыть соединение
    ajaxObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // установить формат содержимого POST-запроса
    ajaxObject.send('x=' + encodeURIComponent(x) + '&y=' + encodeURIComponent(y)); // отправить POST-запрос
    ajaxObject.onreadystatechange = function() { // установить функцию-обработчик изменения свойства readyState
      if (ajaxObject.readyState == 4) { // если readyState стало 4, т.е. ответ от сервера пришел и готов к обработке
        if(ajaxObject.status == 200) { // и если ответ успешен
          document.getElementById('calculate').innerHTML = ajaxObject.responseText; // выводим ответ сервера пользователю в <span id="calculate"></span>  
        }
      }
    }
  }
  
</script>
HTML5
1
2
3
4
5
6
7
<h4>Это образец работы простейшего AJAX-калькулятора</h4>
<form>
  введите число X: <input type="text" name="x" id="x" /><br />
  введите число Y: <input type="text" name="y" id="y" /><br />
  <input type="button" value="Вычислить X+Y" onclick="calculate()" />
</form>  
<p>Вычисленная сумма X + Y равна: <span id="calculate"></span></p>
Как видим, ajax.html состоит из двух частей.

1. Это функция calculate() написанная на JavaScript. Именно она делает всю основную работу по отправке запроса на сервер, принятию ответа от сервера, и выводу этого ответа на экран.

2. Обычная веб-форма с двумя полями ввода и одной кнопкой при нажатии на которую, вызывается функция calculate();

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

Код сознательно упрощен за счет небольшой части функциональности (он не будет работать в старых версиях IE).

Удачи, парни! Да пребудет с вами Сила!
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2017, 16:42
Ответы с готовыми решениями:

AJAX - как сделать запрос к PHP-коду без перезагрузки страницы
Эта тема имеет больше общего с JavaScript, но ввиду того, как часто у новичков возникают вопросы...

Как сделать мультизагрузку фото с ajax и php без перезагрузки страницы?
или хотя бы как можно как можно отправить данные массива name='image' в файл обработчик ? ...

Исполнение PHP-скрипта без перезагрузки страницы и без знания JavaScript(!) - Xajax
Приветствую! Решил запостить отдельной темой, а в прилепленной (про Ajax) просто разместить на нее...

ajax загрузка страницы без перезагрузки
ajax загрузка страницы без перезагрузки внутри контента Пример у меня есть ссылка...

Отправка формы без перезагрузки страницы Ajax
Здравствуйте! Никак не могу отправить. В чем ошибка, если есть? Файлы index.html и jquery.js...

6
Пифагор
Модератор
1619 / 1288 / 636
Регистрация: 10.01.2015
Сообщений: 4,255
30.01.2017, 17:10 2
ProCode, а для чего вообще делать клиентский калькулятор на AJAX? Просто JS уже не достаточно???

HTML5
1
2
3
4
5
6
7
8
9
10
11
<form>
  введите число X: <input type="text" name="x" id="x" /><br />
  введите число Y: <input type="text" name="y" id="y" /><br />
  <input name="button" type="button" value="Вычислить X+Y" />
</form>  
<p><span id="calculate"></span></p>
<script>
document.querySelector('input[name="button"]').addEventListener('click', function(){
  calculate.innerHTML = 'Вычисленная сумма X + Y равна: '+ (parseInt(document.querySelector('input[name="x"]').value) + parseInt(document.querySelector('input[name="y"]').value));
})
</script>
Зачем огород городить? Или это с целью обучения сделано? Какое практическое применение?
Цитата Сообщение от ProCode Посмотреть сообщение
Код сознательно упрощен за счет небольшой части функциональности (он не будет работать в старых версиях IE).
Вот так будет. Вынесите в отдельный файл и подключите.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getXmlHttpRequest(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
0
ProCode
33 / 33 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
30.01.2017, 17:19  [ТС] 3
Цитата Сообщение от Пифагор Посмотреть сообщение
ProCode, а для чего вообще делать клиентский калькулятор на AJAX?
Для демонстрации технологии Ajax, разумеется

И да, калькулятор на Ajax - отнюдь не самая странная конструкция, из тех, что периодически мелькают в этом разделе Но к ним почему-то вопросов не возникает ))

Добавлено через 4 минуты
чтобы не быть голословным: Найти в тексте слова длинной более двух символов, отсортировать по алфавиту и записать в файл
0
Пифагор
Модератор
1619 / 1288 / 636
Регистрация: 10.01.2015
Сообщений: 4,255
30.01.2017, 17:22 4
Цитата Сообщение от ProCode Посмотреть сообщение
чтобы не быть голословным:
Какое отношение это имеет к AJAX?
0
ProCode
33 / 33 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
30.01.2017, 17:26  [ТС] 5
Цитата Сообщение от Пифагор Посмотреть сообщение
Вот так будет. Вынесите в отдельный файл и подключите.
Да, я в курсе, именно это я и исключил из кода, для увеличения простоты демонстрации работы Ajax.

Добавлено через 3 минуты
Цитата Сообщение от Пифагор Посмотреть сообщение
Какое отношение это имеет к AJAX?
Это имеет отношение к моему утверждению

калькулятор на Ajax - отнюдь не самая странная конструкция, из тех, что периодически мелькают в этом разделе
на что указывает речевой оборот

чтобы не быть голословным:
путем этого речевого оборота, устанавливается прямая связь между предыдущим и последующим высказыванием.

Вы успеваете следить за ходом моей мысли?
0
Пифагор
Модератор
1619 / 1288 / 636
Регистрация: 10.01.2015
Сообщений: 4,255
30.01.2017, 17:31 6
Цитата Сообщение от ProCode Посмотреть сообщение
Вы успеваете следить за ходом моей мысли?
Главное, чтобы Вы сам это успевали. Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
0
Kerry_Jr
Эксперт PHP
2222 / 2016 / 942
Регистрация: 14.05.2014
Сообщений: 5,896
Записей в блоге: 1
Завершенные тесты: 5
30.01.2017, 18:56 7
Цитата Сообщение от Пифагор Посмотреть сообщение
Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
За сим постановляю
 Комментарий модератора 
Тема закрыта
0
30.01.2017, 18:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2017, 18:56

Отправка формы без перезагрузки страницы (AJAX)
Все работает нормально, но почему то дублируются поля ввода ИМЯ и СООБЩЕНИЕ после нажатия на кнопку...

Пересчет корзины с товарами без перезагрузки страницы, используя AJAX
Читаю, читаю, читаю об этом - честно, не понимаю. Спрошу на конкретном примере: есть корзина...

Как заставить этот код работать без перезагрузки страницы (ajax)
Здравствуйте. Вопрос такой - есть страница table.html в неё подключается table.php с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.