Ответы пользователя по тегу AJAX
  • Как передать значение переменной из JS в PHP без перезагрузки страницы?

    @alexalexes
    В php скриптах не обязательно всегда отдавать клиенту html-текст, тем более в виде статики (за пределами тегов <? ?>).
    А если вы еще используете ajax, обращаясь к тем же скриптам, что формируют полную html страницу, то можно отдавать ответ гораздо гибче (отдавать только чистые данные, без html в случае AJAX, и в остальных случаях - html оснастку, чтобы браузер нарисовал начальное состояние страницы):
    <?php
        if(isset($_POST['checkout']))
        {
          // получили параметр, который используется в AJAX - отдаем только данные (числа, строки, или json объекты)
           echo 'posted:'.$_POST['checkout'];
        }
       else
       {
         // не получили специфичных для ajax параметров - отдаем клиенту обычный HTML
          echo '<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div><?php echo $test ?></div>    
        <script type="text/javascript" src="js/jquery-3.6.0.min.js"></script>
        <script type="text/javascript" src="script.js"></script>
    
    </body>
    </html>';
       }
    ?>

    На этом строят API своей системы.
    Ответ написан
    Комментировать
  • Как получить все имена загруженных изображений из массива и записать в бд php, redbean php, ajax?

    @alexalexes
    Вам сначала нужно подготовить структуру таблиц базы данных, чтобы можно было хранить несколько изображений продукта. Сейчас таблица products хранит сведения об изображении в одном атрибуте image. Вам нужно создать еще одну таблицу, например product_images, в которой будут храниться записи сведений об изображениях продукта - с указанием внешнего ключа product_id в каждой записи.
    А в php поменяется это место:
    $product = R::dispense('products');
       $product->image = $_FILES[$input_name]['name'][0]; // СЮДА НАДО ЗАПИСАТЬ МАССИВ ИМЕН ИЗОБРАЖЕНИЙ (сейчас записано только имя первого изображения)<br>
       R::store($product);

    На что-то такое:
    $product = R::dispense('products');
    $product_id = $product->id;
     foreach($files as $file)
    {
      // Вставка сведений из $file в таблицу product_images с входным параметром $product_id
    }

    Вторым этапом будет изменение методов чтения сведений об изображениях продукта. Чтобы метод адаптивно читал (по старому формату хранения) атрибут image из записи таблицы products, а в случае его пустоты - пытался читать сведения из таблицы product_images (по новому формату хранения).
    Ответ написан
    Комментировать
  • Можно ли пользоваться Ajax с помощью SQL?

    @alexalexes
    В зависимости от требования к скорости доставки изменений для всех пользователей, то эту задачу можно решить разными способами.
    1. Низкие требования к скорости оповещения - "когда пользователь решит сам обновить или перейти на другую страницу, тогда и выведем новое состояние (новый статус, новое сообщение)".
    Классическая форма взаимодействия браузера с сервером.
    Один пользователь набирает сообщение в обычной форме (без ajax). Отправляют его на сервер. Сервер сохраняет его в любой форме. Когда другие пользователи запрашивают у сервера страницу с сообщением или статусом, то они получают новое состояние, если сами сделали какое-то действие, связанное с переходом на другую страницу.
    Так работают старые веб почтовики и форумы 2000-х годов.
    2. Средние требования к скорости оповещения - "пользователь не должен предпринимать никаких действий, чтобы он получил новое состояние, но получать состояние можно раз в несколько минут и более".
    Один пользователь набирает сообщение, отправляет на сервер. А другие пользователи запрашивают новое состояние страницы у сервера по технологии ajax. Проблема в том, что инициатором получения изменений от первого пользователя являются клиентская часть приложения пользователей, которые ждут изменений на сервере, а не приложение сервера. Поэтому когда первый пользователь отправит сообщение, то другие пользователи получат его не сразу, а когда наступит следующий период опроса сервера.
    Это требование подходит для интернет магазинов, чтобы отслеживать статус заказа, новые почтовики.
    3. Высокие требования к скорости оповещения - "пользователь должен незамедлительно получать изменения от сервера, как только другой пользователь сделает действие".
    Вот тут уже на стороне ожидающих пользователей работает технология websocket. Клиентская часть этих пользователей создает соединение с сервером и ждет от него отклика, когда другой пользователь напишет сообщение. Постоянные опросы состояния, как в случае 2 таким пользователям проводить не нужно.
    Но для websocket есть ограничения, что не каждый веб сервер для него годится. Например, с PHP его сложнее подружить, чем с NodeJS. Вся проблема в том, что PHP не приспособлен для обработки множества запросов на одно соединение, в NodeJS и других средах, где такая концепция заложена изначально, проблем не будет с реализацией.
    С такими требованиями работают современные чаты в любых мессенджерах.
    Ответ написан
    Комментировать