[От новичка] Как вставить сниппет в свой js ?

Здравствуйте.
Сразу отступление — я не разработчик, и в MODX особо не разбираюсь.

Подскажите пожалуйста как в свой скрипт AJAX формы, вставить сниппет отправки, а не внешний файл .php?
Сейчас мой код выглядит так:

if(email !=""){

          var data = $("#form").serialize();

          $.ajax({
            url: "/rest.php", // Как вместо этого файла вставить сниппет?
            type: "POST",
            data: data,
            cache: false,
            success: function (json) {
              window.location.assign("/thankyou.html"); 
            },
            beforeSend: function(){
              $('.loader').addClass('is-visible');
            },
            complete: function() {
              $('.loader').removeClass('is-visible');
            }
          });
        }
Всем потратившим время на просмотр и ответ — спасибо!
Сергей Сергеевич
30 января 2016, 15:07
modx.pro
4 137
0

Комментарии: 10

Максим Кузнецов
30 января 2016, 18:42
0
Непосредственно сниппет/его результат — никак. Вы можете отправлять аяксом запрос на конкретную/текущую страницу, где будет вызван сниппет, который будет возвращать результат при соответствующем аякс-запросе.

Подробнее.
    Сергей Сергеевич
    31 января 2016, 08:50
    0
    Спасибо! Хоть это и сложно для меня, но я понимаю, что это самый верный путь. Спасибо.
    Волков Николай
    30 января 2016, 21:05
    0
    Действительно, как и сказал Максим, это нельзя сделать. Правда мне не понятно зачем это вам нужно? Что делает ваш сниппет?
      Роман Садоян
      30 января 2016, 22:23
      0
      Исходя из контекста он должен принять значения и что-то вернуть.
        Сергей Сергеевич
        31 января 2016, 08:51
        0
        Это отправка формы, с моего статичного сайта.
        Николай
        30 января 2016, 21:30
        0
        Создать на сайте новую страницу, пусть ее alias будет post. Шаблон пустой, далее в контент вставляете свой сниппет, сохраняете. url будет примерно такой:
        url: "/post.html"
          Сергей Сергеевич
          31 января 2016, 08:56
          0
          Спасибо, интересный метод. Но думаю, что будет лучше для меня оставить как есть (внешний файл), и потихоньку вникнуть и понять основы Ajax из урока, что дал Максим первым постом.
            Николай
            31 января 2016, 10:40
            1
            +1
            Ну тогда все элементарно. Оставляем
            url: "/post.php"
            php файлик складываем рядом с index.php. Далее открываем его, и заменяем содержимое на:

            <?php
            require_once 'config.core.php';
            require_once MODX_CORE_PATH.'model/modx/modx.class.php';
            $modx = new modX();
            $modx->initialize('web');
            $modx->getService('error','error.modError', '', '');
            
            if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}
            
            echo $modx->runSnippet("snippet_name", $_POST);
            Первые 5 строчек это подключение API modx, 6 строчка это прием только ajax запросов, т.е просто обратившись site.ru/post.php в ответ будет выдана белая страничка. Ну и запуск нашего сниппета и передача ему всех POST полей. Можно не передавать конечно, в сниппете будут доступны все эти поля, но мне удобнее так вместо $_POST['fields'] использовать $fields. Все. И обязательно echo, чтобы наш js скрипт смог получить ответ. В самом сниппете можно делать return.
        Татьяна
        13 ноября 2018, 15:39
        0
        добрый день. подскажите пожалуйста что я сделала не так.

        у меня похожая ситуация: мне нужно отправить форму с помощью аякса и пхп.
        сделала свой сниппет MySnippet код

        if ($_SERVER[«REQUEST_METHOD»] == «POST») {
        if (isset($_POST['name'])) {$name = $_POST['name'];}
        if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
        if (isset($_POST['formData'])) {$formData = $_POST['formData'];}

        $to = «mail@yandex.ru»;
        $sendfrom = «mail@yandex.ru»;
        $headers = «From: ». strip_tags($sendfrom). "\r\n";
        $headers .= «Reply-To: ». strip_tags($sendfrom). "\r\n";
        $headers .= «MIME-Version: 1.0\r\n»;
        $headers .= «Content-Type: text/html;charset=utf-8 \r\n»;
        $subject = "$formData";
        $message = "$formData
        Имя : $name
        Телефон: $phone";
        $send = mail ($to, $subject, $message, $headers);
        if ($send == 'true')
        {
        echo 'Спасибо за отправку вашего сообщения!';
        }
        else
        {
        echo 'Ошибка. Сообщение не отправлено!';
        }
        } else {
        http_response_code(403);
        echo «Попробуйте еще раз»;
        }

        в корне сайта где index (не в папку core) положила файл пхп код которого

        <?php

        require_once 'config.core.php';
        require_once MODX_CORE_PATH.'model/modx/modx.class.php';
        $modx = new modX();
        $modx->initialize('web');
        $modx->getService('error','error.modError', '', '');

        if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') {return;}

        echo $modx->runSnippet(«MySnippet», $_POST);
        ?>

        в js файле указала файл пхп который лежит рядом с index код

        $(document).ready(function () {
        $(«form»).submit(function () {
        // Получение ID формы
        var formID = $(this).attr('id');
        // Добавление решётки к имени ID
        var formNm = $('#' + formID);
        $.ajax({
        url: 'runmusnippet.php',
        type: «POST»,
        data: formNm.serialize(),
        success: function (data) {
        // Вывод текста результата отправки
        $(formNm).html(data);
        },
        error: function (jqXHR, text, error) {
        // Вывод текста ошибки отправки
        $(formNm).html(error);
        }
        });
        return false;
        });
        });

        как итог, сообщение с ошибкой — Ошибка. Сообщение не отправлено!

        подскажите пожалуйста, может у меня неправильный алгоритм действий и я что то не сделала, или как то не так подключила. Подскажите пожалуйста.

        Заранее, спасибо
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10