我正在尝试使用AJAX在jQuery Dialog
中创建表单以保存一些数据。
我目前正在diaog中显示表单,这很好。
我有我的行动:
$this->folderForm = new FolderForm(array(),array('user_template'=>$user_template));
if ($request->isXmlHttpRequest())
{
if($request->isMethod('post'))
{
$this->folderForm->bind($request->getParameter('folder'));
if($this->folderForm->isValid())
{
$values = $this->folderForm->getValues();
}
}
}
以上似乎工作正常。
问题是,如果表单通过AJAX无效,我如何将表单发布到操作并显示错误消息?
由于
答案 0 :(得分:1)
您可以使用json dataType发布表单并返回包含有关表单是有效还是包含错误的信息的json响应。 我假设您已经使用jQuery发布表单,因为您正在使用jQuery-UI。
E.g。
// apps\myApp\modules\myModule\actions\action.class.php
public function executeEdit(sfWebRequest $request)
{
$this->folderForm = new FolderForm(array(), array('user_template' => $user_template));
if ($request->isMethod(sfRequest::POST) && $request->isXmlHttpRequest()) {
$this->folderForm->bind($request->getParameter($form->getName()));
$response = array();
if ($this->folderForm->isValid()) {
$folder = $this->folderForm->save();
$response['errors'] = array();
} else {
foreach ($this->folderForm->getErrors() as $name => $error) {
$response['errors'][] = array(
'field' => $name,
'message' => $error->getMessage(),
);
}
}
$this->getResponse()->setContentType('application/json');
return $this->renderText(json_encode($response));
}
}
然后在你的javascript中
$.post('/myModule/edit/id/' + id, $('my-form').serialize(), function (j) {
var length = j.errors.length;
if (length) {
for (var i = 0; i < length; i++) {
console.log(j.errors[i]);
// Show error
}
} else {
// Show success notification
}
}, 'json');