Вызов функции контроллера из ошибки разбора JS-JSON - только в Firefox - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть кнопка, которая при нажатии должна вставлять пользователей в таблицу.

По сути, я застрял в вызове функции контроллера из моего JavaScript.

Кнопка HTML.

<div class="continue_btton">
    <input type="submit" name="submit" id="SaveSettings" value="<?php echo $this->translate('Update'); ?>" class="update bdr_rds2" onclick="if($('input[name=target_criteria]:checked').val() == 'optedin_users')
                                                                                                                                                {
                                                                                                                                                    return someFun()
                                                                                                                                                } else 
                                                                                                                                                {
                                                                                                                                                    return validateForm()
                                                                                                                                                }
    ">
</div>

ОБНОВЛЕНО:

Javascript

 function someFun(){
    var urlInsert = '@Url.Action("myFunAction")';
        $.get(urlInsert, function () {
    });

}

Также попытался ниже, но функция контроллера не вызывает

function myFunAction(){
    var formData = $("#Preference").serialize();
    $.ajax({
        type: 'POST',
        url: '/advertiser/campaign/myFun',
        data: formData,
        dataType: 'html',
        success: function (data) {
            $('span.targetCount').text($.trim(data));
        },
        error: function (jqXHR, textStatus, errorThrown) {
            var error = $.parseJSON(jqXHR.responseText);
            var content = error.content;
            console.log(content.message);
            if (content.display_exceptions)
                console.log(content.exception.xdebug_message);
        },

    });
}

Controller.php - Кажется, не вызывается

public function myFunAction(){
    echo '+++myFUN---';exit;

}

Ошибка:

JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON

Пробовал dataType в формате html, json и text.Все та же ошибка.

1 Ответ

0 голосов
/ 31 мая 2019

Я предполагаю, что либо ваши почтовые данные, либо ваш ответный объект не считается действительным json, и поэтому Firefox выдает ошибку (возможно, Chrome более щадящий).Вы можете проверить, правильно ли отправлен запрос, действительно ли приходит ответ от сервера и является ли он действительным json.Вы должны рассмотреть возможность возврата действительного json из вашего myFunAction метода в вашем контроллере (вместо того, чтобы просто печатать строку, как вы делаете прямо сейчас):

public function myFunAction(){
    $data = '+++myFUN---';

    return new JsonModel([
        'data' => $data
    ]);
}

Узнайте больше о том, как правильно вернуть Json в Zend, напримерв этом посте здесь: https://akrabat.com/returning-json-from-a-zf2-controller-action/

Для действительного ответа json должен быть установлен заголовок content-type равным application/json, и в теле ответа должна быть допустимая строка json.Zend JsonModel поможет вам в этом.

Когда вы публикуете данные, вам также следует установить content-type запроса на application-json, так как сервер понимает, что вы отправляете объект json с данными.

Я никогда не использую JQuery, но думаю, что это делается так, если я не ошибаюсь:

$.ajax({
  type: 'POST',
  url: '/advertiser/campaign/myFun',
  data: formData,
  contentType: "application/json",
});
...