你没有标记 jQuery,所以我只给你一个 JavaScript 答案。
Read this on sending Forms from Mozzila
这里是an answer,仅使用 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);
});
确保您通过 ZF2 在 PHTML 部分中呈现的表单包含正确的操作 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() ?: '',
];
}
这个答案显然遗漏了一些东西,例如使用工厂为控制器创建表单、路由配置以及对象水合和处理。
这是因为这些事情超出了问题的范围。
附: - 我使用了 FQCN(完全合格的类名),您应该将它们包含在文件的顶部。