jQuery .post не выполняет задачу в URL - PullRequest
1 голос
/ 19 октября 2010

Моя проблема связана с jQuery .post и Joomla. У меня есть шаблон с формой, которая находится в одной из областей аккордеона (с использованием аккордеона JQuery UI). У меня есть кнопка type = submit в форме. HTML-форма создается с помощью jQuery, когда пользователь нажимает кнопку в области аккордеона.

Когда пользователь нажимает кнопку отправки формы, событие вызывает jQuery.post, который затем должен вызывать функцию сохранения внутри контроллера, которая, в свою очередь, вызывает функцию сохранения в БД в модели.

URL для .post - это index.php, и я сериализирую () входные данные формы - со скрытыми элементами, у меня задана функция сохранения, которая находится внутри контроллера, и также определен контроллер.

Проблема в том, что задача сохранения в контроллере не вызывается при нажатии кнопки, а также функция сохранения в дб в модели. После того, как пользователь нажимает на кнопку, страница перенаправляется на index.php (домашняя страница). Нет сохранения в базе данных.

Любая помощь будет высоко ценится.

элементы формы template.php:

<input type="hidden" name="controller" value="controller" />       
<input type="hidden" name="task" value="saveProgramUI" />'

.js Код:

jQuery('#new_program_form').submit( function () {
    if (jQuery('#new_program_form').valid()) {
        jQuery.post("index.php", jQuery("#new_program_form").serialize(), function(html){
            alert("Data Loaded: " + html);
         });
    }
});

Код контроллера:

function saveProgramUI(){



    $program = JRequest::get( 'POST' );
    $model = & $this->getModel('pfm');

    $model->saveProgramUI($program);


    $resp = "Hello World!";

    return $resp;

}

Код модели:

function saveProgramUI($program)
{

 $programTableRow =& $this->getTable('programs');
// Bind the form fields to the programs table, save to db

if (!$programTableRow->save($program)) {

JError::raiseError(500, 'Error saving program');
} 

}

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Добавьте return false; в конец вашего submit обработчика.

Без этого браузер отправит форму в обычном режиме после запуска вашего обработчика, прежде чем он получит возможность отправить запрос.

0 голосов
/ 21 октября 2010

решаемая.

Это была проблема Joomla, а не jQuery.

Необходимо добавить эту строку в файл компонента для компонента:

$controller->execute(JRequest::getCmd('task'));

Также добавлено представление view.raw.php и соответствующий шаблон макета.

Эта страница была поучительной: http://docs.joomla.org/How_Joomla_pieces_work_together

Я новичок в разработке Joomla, поэтому вернулся к основам, чтобы понять вещи, на этой странице был ответ.

Спасибо всем за идеи!

...