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

Исполнение PHP-скрипта без перезагрузки страницы и без знания JavaScript(!) - Xajax

26.12.2016, 21:04. Показов 6480. Ответов 9
Метки ajax (Все метки)

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

План таков: мы с вами, для начала, без всяких лирических отступлений рассмотрим конкретный пример работающего на Xajax простенького приложения. А уже потом, на основе ваших вопросов и, я надеюсь, дополнений, сформируем дополнительное описание, может мини-FAQ, может еще чего, по ходу обсуждения станет ясно.

Итак, приложение наше намеренно упрощено до предела, с целью лучшего восприятия кода. С другой стороны - вполне типично и актуально для любого веб-разработчика. Пример его работы можно посмотреть здесь http://procode.pw/xajax/ex/xv.php - делает оно вот что:

- Берет данные из формы.
- Пишет эти данные в файл.
- Затем читает данные из этого же файла.
- И выводит их в браузер посетителя.

То есть вполне типовые задачи: отправка формы и операции ввода/вывода в/из БД (файл в нашем примере может быть легко заменен на MySQL или что-то подобное). И все это - без перезагрузки страницы браузера

Ниже приведен код приложения с комментариями. Если что непонятно - спрашивайте. Приложение находится в единственном файле. Второй файл рядышком (text.txt) служит в качестве базы данных. Файловую структуру и пр. можете посмотреть в архиве: http://procode.pw/xajax/ex/xv.tgz туда же упакован и Xajax версии 0.5. То есть архив содержит полностью рабочую версию данного примера - распакуйте куда-нибудь себе на сервер с PHP (тестировалось на 5.6) и все, по идее, сразу должно заработать.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
 
require ('../xajax_core/xajax.inc.php'); // подключаем Xajax
$objXajax = new xajax(); // создаем объект класса Xajax
 
$objXajax->register(XAJAX_FUNCTION,"zaborWrite"); // регистрируем в Xajax функцию zaborWrite 
$objXajax->processRequest(); // инициализируем обработку запросов через Xajax (метод processRequest() следует вызывать ДО отправки заголовков браузеру)
 
function onLoad() { //функция вывода текста, записанного до нас
    $filename = "text.txt"; //файл, в котором текст
    $text = file_get_contents($filename); //читаем текст из файла
    $text = 'На заборе уже написано:<p style="color:blue;"><b>'.$text.'</b></p>'; //форматируем строку
    echo $text; //выводим строку в браузер
}
 
function zaborWrite($data = "") { // главная функция скрипта
    
    $filename = "text.txt"; //файл, в котором текст
    
    if($data) { //если через форму пришел новый текст
        $text = $data['text']; // забираем текст из массива $data переданного из формы
        $text = substr($text, 0, 1000); //обрезаем текст до длины не более 1.000 сиволов
        $text = filter_var($text, FILTER_SANITIZE_STRING); //вырезаем теги и пр.
        file_put_contents($filename, $text, LOCK_EX); //пишем в файл
    }   
    
    $text = file_get_contents($filename); //читаем текст из файла
    $text = 'Вы написали на заборе:<p style="color:red;"><b>'.$text.'</b></p>'; //форматируем строку 
        
    $objResponse = new xajaxResponse(); // создаем xajax-объект с ответом сервера
    $objResponse->assign("messageVasia", "innerHTML", $text); // здесь в объект с ответом включаем инструкцию, чтобы в элемент с id "messageVasia" поместили наш текст из файла ($text)  
    return $objResponse; // отправляем объект с ответом в браузер 
}
 
?>
 
<!DOCTYPE html>
<html lang="ru">
    <head>
        <title>Xajax - здесь был Вася!</title>
        <?php $objXajax->printJavascript("../"); /* выводим заголовки Xajax (можете потом глянуть в исходниках HTML страницы на что это похоже)*/ ?>
    </head>
 
    <body>
     <span id="messageVasia"><?php onLoad(); /*выводим старый текст из файла при загрузке страницы*/ ?></span>
    
     <form method="post" id="zabor" onSubmit="return false"> <!-- через onSubmit предотвращаем отправку формы по клику на кнопке -->
      <p>Хотите написать на заборе что-то от себя?</p>
      <p><textarea rows="7" cols="45" name="text"></textarea></p>
      <p><input type="submit" value="Написать на заборе" onClick="xajax_zaborWrite(xajax.getFormValues('zabor'));"></p> <!-- по клику вызываем zaborWrite и в качестве параметра $data передаем ему ассоциативный массив с полями нашей формы 'zabor' :) -->
    </form>
 
   </body>
</html>
Чуть позже допишу сюда по отдельным участкам кода более подробно.

Добавлено через 1 час 11 минут
Что такое Xajax?

Xajax - это PHP и JavaScript библиотека, позволяющая реализовать технологию Ajax (приложения, работающие без перезагрузки веб-страницы) не используя в разработке кодирование на языке JavaScript. То есть, весь необходимый JavaScript-код УЖЕ написан разработчиками Xajax, и нам остается лишь написание кода на PHP и HTML.
Библиотека подключается как к PHP-коду

PHP
1
2
<?php
require ('../xajax_core/xajax.inc.php');
так и в HTML(JavaScript)

PHP/HTML
1
2
3
<head>
    <?php $objXajax->printJavascript("../"); ?>
</head>
А что там вообще происходит в исходном примере? Сходу ничего не понятно...

В библиотеке Xajax есть два основных PHP-класса: xajax и xajaxResponse

Объект класса xajax - служит для принятия и обработки запроса от клиента(браузера).

PHP
1
2
3
$objXajax = new xajax(); 
$objXajax->register(XAJAX_FUNCTION,"zaborWrite");
$objXajax->processRequest();
Объект класса xajaxResponse - служит для формирования и передачи ответа сервера - клиенту(браузеру).

PHP
1
2
3
$objResponse = new xajaxResponse(); 
$objResponse->assign("messageVasia", "innerHTML", $text);
return $objResponse;
JavaScript-библиотеки, подключаемые в HTML-код, участвуют в работе обоих классов, обеспечивая реализацию технологии Ajax.

PHP/HTML
1
2
3
<head>
    <?php $objXajax->printJavascript("../"); ?>
</head>
Запрос от клиента к серверу реализуется через вызов JavaScript-функции

JavaScript
1
2
<p><input type="submit" value="Написать на заборе" 
onClick="xajax_zaborWrite(xajax.getFormValues('zabor'));"></p>
При этом, обратите внимание: нам не нужно писать какую-то особую функцию на JS, мы просто добавляем к названию зарегистрированной ранее функции

PHP
1
$objXajax->register(XAJAX_FUNCTION,"zaborWrite");
приставку

JavaScript
1
xajax_
и добавляем к событию

JavaScript
1
onClick
при этом, конструкция

JavaScript
1
xajax.getFormValues('zabor')
которую мы передаем в качестве параметра ('zabor' - это id веб-формы), служит для передачи значений полей веб-формы в виде ассоциативного массива на сторону сервера

PHP
1
$text = $data['text'];
то есть, так уже понятнее, да? Уже получили массив данных в формате PHP и теперь можем изголяться с ним как угодно

Вдоволь наизголявшись, создаем объект класса xajaxResponse

PHP
1
$objResponse = new xajaxResponse();
формируем ответ-инструкцию с помощью метода assign (методов там достаточно много, если будет интерес - постепенно их рассмотрим).

PHP
1
$objResponse->assign("messageVasia", "innerHTML", $text);
(это инструкция клиенту(браузеру) вставить в элемент с id "messageVasia" текст из переменной $text)

и отправляем ее клиенту

PHP
1
return $objResponse;
Таково краткое описание механики по которой всё это и работает.

И ведь работает же!
6
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2016, 21:04
Ответы с готовыми решениями:

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

Как загрузить результат php скрипта без перезагрузки страницы?
Добрый день! Есть скрипт на php: Код скрипта на php &lt;?php header('Content-Type: text/html; charset=utf-8'); ...

Пример простейшего калькулятора на PHP без перезагрузки страницы (чистый Ajax, без jQuery и других библиотек)
Привет. Это, в каком-то смысле, продолжение креатива https://www.cyberforum.ru/php-beginners/thread1889429.html но здесь я решил не...

9
 Аватар для ProCode
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
27.12.2016, 22:10  [ТС]
Парни, я в недоумении: почему нет комментариев? То есть:

- Либо я так хорошо все написал, что не возникает ни единого вопроса по ходу рассмотрения темы

- Либо это никому не нужно :/

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

ээ?
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
28.12.2016, 21:38
Цитата Сообщение от ProCode Посмотреть сообщение
Либо это никому не нужно :/
мне кажется, эта библиотека не пользуется спросом. сколько на форуме тем касающихся аjax, но я не видел ни одного совета пользоваться данной библиотекой. да и для начинающего(имхо) сложновато, проще разобраться с $.ajax(query).
1
 Аватар для ProCode
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
28.12.2016, 22:12  [ТС]
Цитата Сообщение от fanatikus Посмотреть сообщение
мне кажется, эта библиотека не пользуется спросом. сколько на форуме тем касающихся аjax, но я не видел ни одного совета пользоваться данной библиотекой. да и для начинающего(имхо) сложновато, проще разобраться с $.ajax(query).
вообще, странно - дело в том, что эта библиотека для того и создавалась, чтобы проще было не нужно учить JavaScript - достаточно одного PHP. внутренняя логика достаточно простая, уж всяко проще какого-нибудь мозголомного MVC от Zend )
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
28.12.2016, 22:45
Цитата Сообщение от ProCode Посмотреть сообщение
не нужно учить JavaScript - достаточно одного PHP
В том то и дело. Когда достаточно php, то аякс особо и не нужен.
И да, аякс на jquery действительно выглядит проще, а главное гибче и перспективней.
Но для самообразования почитать было интересно
1
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
09.01.2017, 13:24
Вопрос: а где взять эту библиотеку?? xajax.inc.php
require ('../xajax_core/xajax.inc.php');
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
09.01.2017, 13:26
Цитата Сообщение от DJestin Посмотреть сообщение
а где взять эту библиотеку??
http://www.xajax-project.org/en/download/
0
0 / 0 / 1
Регистрация: 29.12.2016
Сообщений: 157
09.01.2017, 13:40
А Сорри сначала пропустила в описании..
Файл xajax.inc.php нашла.
Есть вопрос а как реализовать обработку selecta который берет данные из базы, без перезагрузки страницы??
0
 Аватар для ProCode
37 / 37 / 6
Регистрация: 11.12.2016
Сообщений: 329
Записей в блоге: 6
12.01.2017, 19:11  [ТС]
Цитата Сообщение от DJestin Посмотреть сообщение
Вопрос: а где взять эту библиотеку?? xajax.inc.php
require ('../xajax_core/xajax.inc.php');
http://procode.pw/xajax/ex/xv.tgz - в архиве всё уже есть, что нужно, код полностью рабочий

Цитата Сообщение от DJestin Посмотреть сообщение
Есть вопрос а как реализовать обработку selecta который берет данные из базы, без перезагрузки страницы??
Для начала переформулируем задачу:

1. Написать на PHP код, который будет брать данные из базы.

2. Зарегистрировать этот код в виде xajax-функции.

3. Привязать вызов этой xajax-функции к коду select-а, скажем, через обработчик события onChange

HTML5
1
2
3
4
5
6
7
8
<form method="post" id="zabor">
    <select onChange="xajax_zaborWrite(xajax.getFormValues('zabor'));">
      <option value="#">Выберите раздел сайта</option>
      <option value="depart.html">Отделения</option>
      <option value="techinfo.html">Техническая информация</option>
      <option value="study.html">Обучение</option>
    </select>
  </form>
0
 Аватар для rodigy
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 577
24.08.2017, 22:50
Цитата Сообщение от ProCode Посмотреть сообщение
Либо это никому не нужно :/
Как делает новичёк, он идет в гугл и просит его что типа асинхронный запрос/ajax/отправка формы без перезагрузки, ну а гугл на первых страницах отдает только материалы по js и jquery
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2017, 22:50
Помогаю со студенческими работами здесь

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

Как отправить переменную с js на php без перезагрузки страницы?
есть переменная a её нужно отравить в php код как это можно реализовать? &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt;...

Как выполнить PHP код без перезагрузки страницы?
У меня имеется код: &lt;?php if(isset($_POST)) { $text = $_POST; echo $text; } ?&gt; &lt;form method=&quot;post&quot;...

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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