Ответ с php в js (ajax) без json

114
13 ноября 2021, 00:30

сделал аяксом запрос на покупку тариф. плана на сайте, дополнительно захотелось выполнить валидацию на сервере (например если введенная сумма меньше доступной то ошибка), вопрос лишь в том как мне вывести с php ошибку в success аякса, что бы отобразить соответствующие уведомление.

Пробовал вариант с dataType: "json" (этот вариант кода здесь и прикреплю), но в таком виде скрипт на сервере не принимает данные, прошу помочь с данным вопросом, и показать по возможности как можно вывести и проверить через if в аяксе, переменную с данными об ошибке с php.

Всем спасибо. js

<script type="text/javascript">
function createTarif() {
    var msg = $('form[name="create-tarif"]').serialize();
        depositValue = $("#deposit__amount").val();
    $.ajax({
        method: "POST",
        url: "{{ app }}tarif/confirm",
        dataType: "json",
        data: msg,
        success: function(data) {
            // $('#results').html(data);
            var status = JSON.parse(data);
            if(status['status'] === 'success') {
                AllMessageObj.allmess = 'Покупка Тариф. плана "{{ tarif.title }}" на сумму ' + depositValue + '$';
                AllTypeMessageObj.allmess = 'success';
                allRightAlergMess();
                }
                else {
                    AllMessageObj.allmess = 'Ошибка Тариф. плана "{{ tarif.title }}" на сумму ' + depositValue + '$';
                    AllTypeMessageObj.allmess = 'error';
                    allRightAlergMess();
            }
         },
        error:  function(){
            AllMessageObj.allmess = 'Ошибка2 Тариф. плана "{{ tarif.title }}" на сумму ' + depositValue + '$';
            AllTypeMessageObj.allmess = 'error';
            allRightAlergMess();
        }
    });
}

    function confirmTarif()
{
    $tarif = model_tarif::getById($this->request['id']);
    if(!$tarif)
        location('/');
    $amount = (int)$this->request['amount'];
    if($tarif['amount_from'] > $amount || $tarif['amount_to'] < $amount)
        location('/');
    $user = user::i()->getUser();
    if($user['baks_bonus_money'] < $amount)
    {
        $this->assign('no_money', true);
        $this->tarifs();
    }
    else
    {
        $result = ['status' => 'success']; // ответ для js
        model_user_tarif::add($tarif, $user, $amount);
        $this->assign('deposit_success', true);
        $this->tarifs();
    }
    $json = json_encode($result);
    return $json;
}
Answer 1

попробуйте так:

$.post("{{ app }}tarif/confirm", msg, function(data){ 
    if (typeof data == "object") {
        if ("status" in data) {
            if (data['status'] == "success") {
                //ваш код...
            } else {
                //ваш код...
            }
        } else alert("error: status not found");
    } else alert("error: response is not object");
}, "json");

у вас переменная $result в php создается только внутри блока else, подумайте о том что вернёт ваш ответ в js если выполнится if

Если захотите убрать json (просто убираете проверки на объект и существование ключа ну и вашу data['status'] == "success") + четвёртый аргумент функции post "json" и тогда data будет просто строковым ответом с сервера

READ ALSO
Свой шаблон в SuggestView - Яндекс карта

Свой шаблон в SuggestView - Яндекс карта

Как создавать свой шаблон в SuggestView я понял, но как вывести данные от SuggestView в шаблоне - я так и не понял

180
Событие, при котором выбрано 2 чекбокса

Событие, при котором выбрано 2 чекбокса

Срабатывает скрипт при выборе одного чекбоксаА как можно описать событие при выборе двух (и более)? Вот так не получается

102