#zend-framework #jquery
#zend-framework #jquery
Вопрос:
Я пытаюсь работать с jQuery в Zend Framework. И вариант использования, с которым я сталкиваюсь, заключается в том, что я пытаюсь сохранить данные в БД. Всегда выдает ошибку ajax, хотя данные сохраняются в базе данных.
Контроллер, который я использую для добавления данных, выглядит следующим образом:
public function addAction()
{
// action body
$form = new Application_Form_Costs();
$form->submit->setLabel('Add');
$this->view->form = $form;
if($this->getRequest()->isPost())
{
$formData = $this->getRequest()->getPost();
{
if ($form->isValid($formData))
{
$costTitle = $this->_request->getPost('costTitle');
$costAmount = $this->_request->getPost('costAmount');
$costs = new Application_Model_DbTable_Costs();
if($costs->addCosts($costTitle, $costAmount))
{
echo "suces";
}
// $this->_helper->redirector('index');
}
else
{
$form->populate($formData);
}
}
}
}
И jQuery, который передает данные, выглядит следующим образом:
$('#cost').submit(function (){
data = {
"cost_title":"cost_title",
"cost_amount":"cost_amount"
};
$.ajax({
dataType: 'json',
url: '/index/add',
type: 'POST',
data: data,
success: function (response) {
alert(response);
},
timeout: 13*60*1000,
error: function(){
alert("error!");
}
});
});
Я всегда получаю ошибку.
В чем проблема в этом коде?
Заранее спасибо.
Комментарии:
1. Проверьте ajax-запрос в firebug… Является ли ответ действительным в формате JSON? jsonlint.com
2. Получение всего js в качестве ответа!
3. Можете ли вы вставить полученную ошибку?
4. вставка данных выполнена успешно, она должна быть успешной: но происходит ошибка: .где я получаю установленное мной предупреждение об ошибке (посмотрите на мой js-код)
Ответ №1:
Я бы настоятельно рекомендовал вам внедрить новейшие методы Zend / AJAX.
// Inside your php controller
public function init()
{
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('add', 'json')
->initContext();
}
public function addAction()
{
// action body
$form = new Application_Form_Costs();
$form->submit->setLabel('Add');
$this->view->form = $form;
if($this->getRequest()->isPost())
{
$formData = $this->getRequest()->getPost();
{
if ($form->isValid($formData))
{
$costTitle = $this->_request->getPost('costTitle');
$costAmount = $this->_request->getPost('costAmount');
$costs = new Application_Model_DbTable_Costs();
if($costs->addCosts($costTitle, $costAmount))
{
// The view variables are returned as JSON.
$this->view->success = "success";
}
}
else
{
$form->populate($formData);
}
}
}
// Inside your javascript file
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.get("/index/add/format/json", function(data) {
alert(data);
})
.error(function() { alert("error"); });
Для получения дополнительной информации:
Ответ №2:
Я думаю, вы получаете ошибку при выводе сеанса. Почему бы вам не отключить средство визуализации, поскольку вам просто нужен ответ на запрос echo "suces"
, которого более чем достаточно для вашего AJAX.
Комментарии:
1. Поскольку единственная проблема, которую я здесь вижу, это вероятность печати макетов / сценариев просмотра. Вы поставили
exit;
сразу после сообщения об успешном завершении? У вас где-нибудь есть рабочий пример?