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

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

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

Author24 — интернет-сервис помощи студентам
Привет. Это, в каком-то смысле, продолжение креатива Исполнение 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2017, 16:42
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

Вы успеваете следить за ходом моей мысли?
0
2170 / 1653 / 840
Регистрация: 10.01.2015
Сообщений: 5,192
30.01.2017, 17:31 6
Цитата Сообщение от ProCode Посмотреть сообщение
Вы успеваете следить за ходом моей мысли?
Главное, чтобы Вы сам это успевали. Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
30.01.2017, 18:56 7
Цитата Сообщение от Пифагор Посмотреть сообщение
Не занимайтесь ерундой и не засоряйте ветку подобными постами аля "готовые решения". Для этого есть Обмен готовыми решениями
За сим постановляю
 Комментарий модератора 
Тема закрыта
0
30.01.2017, 18:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2017, 18:56
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru