Прошу помочь с проверкой отправляемых данных

Тема в разделе "Общие вопросы", создана пользователем zema50, 18 сен 2023.

  1. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
    добрый день, уткнулся в проблему, симпла и модуль сдэк, есть тариф - курьер, есть тариф - пвз, если выбран тариф пвз, то нужно выбрать адрес пвз, если адрес не выбран то при отправке должно показать ошибку типа, выберите адрес пвз, и вот тут затык ((((
    написал функцию ajax но не получается ее привязать к отправке, соответственно проверка на пвз не происходит и все отправляется без адреса.
    я честно говоря по js не особо, может кто подскажет как лучше реализовать проблему ?
     
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Так а конкретика где?))
     
  3. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Сайт, пример кода и т.п.
     
  4. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
    конкретика тут https://stilehost.ru/test отправляем в корзину идем оформлять и вся конкретика на лицо.
    в js прописана функция проверки пвз
    function errorPvz() {
    var status = true;

    $.ajax ({
    async: false,
    url: 'index.php?route=extension/shipping/cdek/errorPvz',
    type: 'POST',
    dataType: 'json',
    data: ({
    tariff: $('input[type=radio][name=shipping_method]:checked').val()
    }),
    success: function(json){
    if(json.status) {
    status = true;
    } else {
    alertMessage(json.message, false);
    status = false;
    }
    },
    error: function(data) {
    console.log('errorPvz error', data);
    status = true;
    }
    });

    return status;
    }
    когда выбран адрес он записывается в сессию, при отправке ajax передаю код тарифа по которому определяется пвз это или курьер, если пвз то проверяется на наличие адреса пвз по сессии, если сессия пустая возвращает ошибку.
     
  5. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Товар не заказать, магаз закрыт для обычных пользователей
     
  6. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    А вообще, данная функция всегда будет возвращать true. Потому, что ajax это асинхронное действие
     
  7. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    После вызова ajax, браузер сразу перейдёт к строчке return status;
     
  8. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Чтобы этого избежать, необходимо, чтобы дальнейшие действия выполнялись в callback функции, которая будет вызываться в success и error
     
  9. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
    сорри, открыл.
    если можно насчет этого поподробнее, но тут еще проблема что к функции проверки пвз нет обращения, при отправке обращается на проверку обязательных полей в js симплы. а как привязать эту джску ? и по идее проверка на пвз должна быть первой ?
     
  10. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Эмммм... А эта функция вообще не вызывается нигде.
     
  11. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    По поводу вызова. Это лучше смотреть документацию симплы. Сам ещё не копался в этом.
     
  12. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Callback - это такой вариант:

    function A()
    {
    $.ajax(
    ...
    success: function (json) {
    // Вот это Callback функция, которая вызывается, когда ajax выполнился
    B(json);
    }
    );
    }
     
  13. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Кстати, не обязательно, что только такой механизм в симпле подразумевается. В общем, это лучше открывать документацию симплы и там смотреть как делать дополнительные проверки
     
  14. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
    в том и проблема что не вызывается.
    что такое Callback я представляю, просто не не знаю как ее правильно прикрутить сюда.
    я про это думал, но где взять такую документацию.
    наверно придется связываться с автором симплы, не факт конечно что он ответит.
     
  15. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Так там в сайте симплы и в самом модуле (архиве) существует FAQ (детально не смотрел, но знаю, что такое существует)
     
  16. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
  17. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Тогда лучше написать, ну или код детально смотреть.
     
  18. zema50

    zema50 Продвинутый пользователь

    Сообщения:
    864
    Симпатии:
    98
    очень много время нужно, а с ним напряг, жалко тратить (((
    может кто уже сталкивался с такой проблемой, подскажет.
     
  19. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    848
    Симпатии:
    111
    Тогда в инете поискать аналоги проверок, но для других модулей. Симпла же известный модуль, поэтому что-нибудь где-нибудь допиливали и можно будет сделать таким же образом.
     
  20. Blast

    Blast Продвинутый пользователь

    Сообщения:
    225
    Симпатии:
    80
    насколько я понимаю логику симплы, тут не нужны никакие аяксовые функции проверки, т.к. симпла сама по себе отсылает аяксовый запрос на перезагрузку страницы при изменении полей в оформлении заказа.
    для проверки выбора пвз вы должны модификатором вклиниться в simplecheckout_shipping.php, сделать там проверки и указать симпле на ошибку что-то типа:
    Код:
    $this->_templateData['error_shipping']     = 'текст ошибки';
    $this->simplecheckout->addError('shipping');
     
    zema50 нравится это.