Пользовательский компонент AJAX - данные из поля Редактор

Я пытаюсь отправить данные из поля формы «editor». Когда я делаю это без ajax, он показывает значение, а AJAX просто делает его пустым.

Array ( [subject] => asdasdasdasd [description] => [priority] => 3 [cc] => [bcc] => [id] => [created_by] => 688 )

Обратите внимание на поле [description]. Я заполнил данные с помощью теста, но все равно пуст.

Похоже, что мой jquery сериализует данные и не может найти значение из поля редактора. Когда я пытаюсь распечатать $data, он выводится следующим образом:

Дополнительную информацию см. в моем коде:

JS:

jQuery(document).ready(function ($) {
    $('#request-form #submit').click(function (e) {
        $('#request-form').ajaxSubmit({
            url: 'index.php?option=com_helpdesk&task=request.save',
            type: 'POST',
            beforeSerialize: function($form, options) {
                // I was just trying to see what it prints. It is just showing the serialize form values
                console.log($form);
            },
            success: function (result) {
                var response = $.parseJSON(result);
                if (!response['success']) {
                    bootbox.alert(response['message']);
                }
                else {
                    bootbox.dialog({
                        title: "Success",
                        message: response['message']
                    });
                }
            }
        });
        e.preventDefault();
    });
});

Контроллер:

public function save($key = null, $urlVar = null)
{
        // Check for request forgeries.
        JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

        $model    = $this->getModel();
        $app      = JFactory::getApplication();
        $table    = $model->getTable();
        $key      = $table->getKeyName();
        $data     = $this->input->post->get('jform', array(), 'array');
        unset($data['userfile']);
        $recordId = $data[$key];

        if (!$this->allowSave($data, $key))
        {
            echo new JResponseJson(NULL, JText::_('COM_HELPDESK_ERROR_ACTION_NOT_PERMITTED'), TRUE);
            $app->close();
        }

        $form = $model->getForm($data, false);

        if (!$form)
        {
            echo new JResponseJson(NULL, JText::_('COM_HELPDESK_GENERAL_ERROR'), true);
            $app->close();
        }

        // Validate and Filter data by passing it to Model
        $data = $model->validate($form, $data);

        if (!$data)
        {
            echo new JResponseJson(NULL, JText::_('COM_HELPDESK_INVALID_DATA_ERROR'), true);
            $app->close();
        }

        if (!$model->save($data))
        {
            echo new JResponseJson($response, JText::_('COM_HELPDESK_SAVE_ERROR'), true);
            $app->close();
        }

        $isNew = $model->getState('request.new');

        if ($isNew)
        {
            $recordId = (int) $model->getState('request.id');
            $message  = JText::sprintf('COM_HELPDESK_REQUEST_NEW_SAVE_SUCCESS', $recordId);
        }
        else
        {
            $message = JText::sprintf('COM_HELPDESK_REQUEST_EDIT_SAVE_SUCCESS', $recordId);
        }

        $redirect = JRoute::_('index.php?option=' . $this->option . '&view=' . $this->view_list . $this->getRedirectToItemAppend(), false);
        echo new JResponseJson($redirect, $message);
        $app->close();
    }

Форма XML:

<field
            type="editor"
            label="COM_HELPDESK_REQUEST_DESCRIPTION_LABEL"
            name="description"
            class="form-control"
            height="225px"
        />

EDIT:

Когда я нажимаю кнопку «Сохранить», моя текстовая область заполняется редактором, но для этого мне пришлось использовать метод Non-Ajax. Я хочу, чтобы это было сделано с помощью AJAX.

2 голоса | спросил Sahil Purav 19 Maypm15 2015, 15:04:29

1 ответ


1

Мне удалось сделать это со следующим. Я знаю, что это не лучший способ его реализации. Я буду ждать экспертных обзоров от JSE.

Я использовал beforeSerialize свойство ajaxSubmit JS и добавлен следующий код:

beforeSerialize: function() {
                $('.wf_editor_toggle').click();
                $('.wf_editor_toggle').click();
            },

Explaination:

Редактор JCE отправляет его содержимое родительскому textarea , только когда нажата кнопка Сохранить или Переключить редактор . Поскольку я Ajaxifying моего компонента, моя страница не обновляется, поэтому «Сохранить» предотвращает его поведение по умолчанию.

Поэтому я включил кнопку «Toggle Editor» из компонента JCE и добавил:

$('.wf_editor_toggle').click();

Этот код дважды.

В первый раз он переключит редактор с Normal textarea, а во втором - переключится обратно в исходный редактор. Это необходимо, потому что JCE сохраняет состояние редактора переключения (может быть через файлы cookie)

Любое лучшее решение было бы заметно.

ответил Sahil Purav 19 Maypm15 2015, 18:36:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132