Пользовательский компонент 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.
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)
Любое лучшее решение было бы заметно.