Вы не пометили jQuery, поэтому я даю вам ответ только на JavaScript.
Прочтите это при отправке форм из Mozzila
Вот ответ об отправке простой формы с использованием только Javascript.Приведенный ниже код взят из этого ответа.
const form = document.querySelector("#debarcode-form");
form.addEventListener("submit", e => {
e.preventDefault();
const fd = new FormData(form);
const xhr = new XMLHttpRequest();
xhr.addEventListener("load", e => {
console.log(e.target.responseText);
});
xhr.addEventListener("error", e => {
console.log(e);
});
xhr.open("POST", form.action);
xhr.send(fd);
});
Убедитесь, что форма, созданная вами в части PHTML через ZF2, содержит правильный URL-адрес действия (поэтому вы использовали URL ViewHelper следующим образом: <?= $this->url('name/of/path') ?>
).Это сделано для того, чтобы JavaScript отправлял данные в правильное место вашего приложения Zend Framework.
Затем обработайте данные в вашем контроллере следующим образом:
public function handleFormAction()
{
/** @var \Zend\Http\Request $request */
$request = $this->getRequest();
/** @var \Some\Namespace\Of\CustomForm $form */
$form = $this->getCustomForm(); // You've created this using a Factory of course
if ($request->isPost()) {
$form->setData(\Zend\Json\Json::decode($request->getContent(), Json::TYPE_ARRAY));
if ($form->isValid()) {
$object = $form->getObject();
// object handling, such as saving
// Success response
// Redirect to success page or something
$this->redirect()->toRoute('success/route/name', ['id' => $object->getId()]);
}
// Fail response, validation failed, let default below handle it ;-)
}
if ($request->isXmlHttpRequest()) {
return new \Zend\View\Model\JsonModel([
'form' => $form,
'validationMessages' => $form->getMessages() ?: '',
]);
}
// Default response (GET request / initial page load (not async) )
return [
'form' => $form,
'validationMessages' => $form->getMessages() ?: '',
];
}
В этом ответе явно не хватает таких вещей, как создание формы для контроллера с использованием фабрики, конфигурации маршрутизации игидратация и обработка объекта.
Это потому, что эти вещи не входят в сферу вопроса.
PS - я использовал FQCN (полное имя класса), вы должны включить их в начало файла.