Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/64: Рейтинг темы: голосов - 64, средняя оценка - 4.72
 Аватар для ProCode
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6

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

30.01.2017, 16:42. Показов 16055. Ответов 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).

Удачи, парни! Да пребудет с вами Сила!
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2017, 16:42
Ответы с готовыми решениями:

Загрузка контента без перезагрузки страницы Php Mysql AJAX
Всем доброго времени суток. С общими усилиями сделали страничку которая должна вывести данные страны по выброному id в selecte. ...

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

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

6
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
30.01.2017, 17:10
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
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
30.01.2017, 17:19  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
ProCode, а для чего вообще делать клиентский калькулятор на AJAX?
Для демонстрации технологии Ajax, разумеется

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

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

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

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

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

Вы успеваете следить за ходом моей мысли?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
30.01.2017, 17:31
Цитата Сообщение от ProCode Посмотреть сообщение
Вы успеваете следить за ходом моей мысли?
Главное, чтобы Вы сам это успевали. Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
30.01.2017, 18:56
Цитата Сообщение от Пифагор Посмотреть сообщение
Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
За сим постановляю
 Комментарий модератора 
Тема закрыта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2017, 18:56
Помогаю со студенческими работами здесь

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

Checkbox ajax php отправка без обновления страницы и без кнопки
Здравствуйте! Можете пожалуйста дать простой пример, понятный без лишних строк, который бы отправлял значение checkbox'а, без...

ajax загрузка страницы без перезагрузки
ajax загрузка страницы без перезагрузки внутри контента Пример у меня есть ссылка index.php?do=rules мне нужно что бы при нажатии на эту...

Ajax обновление контента без перезагрузки страницы
Ребята доброго времени! Помогите пожалуйста! Есть не доработанный сайт, в нем есть страница, в странице есть код обновления контента без...

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


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

Или воспользуйтесь поиском по форуму:
7
Закрытая тема Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru