我正在構建一個涉及表單的Web應用程序。正在使用的框架是symfony2。我想讓沒有javascript的用戶都能正常工作,然後逐漸增強啓用javascript的用戶的體驗。我打算使用JQuery作爲我的JavaScript庫。在symfony2中爲Ajax表單提交的優雅降級,無需javascript的用戶
我想要使用FlashMessage組件提交併顯示消息的表單,如果用戶沒有javascript並且請求不是ajax請求。
對於支持javascript的用戶,如果提交成功,我想將消息返回給他們。 JavaScript應該立即在div中顯示該消息。
與此同時,我需要處理錯誤消息。對於沒有使用JavaScript的用戶,整個表單將重新顯示錯誤消息。
對於使用javascript的用戶,ajax響應應該是一個包含輸入組件的id和錯誤消息的數組。然後,Javascript應該將這些插入到表單中而不進行刷新。
望着Symfony2的書,我可以看到提交以下,然後我修改了它檢查是否請求是一個Ajax請求:
public function newAction(Request $request)
{
// just setup a fresh $task object (remove the dummy data)
$task = new Task();
$form = $this->createFormBuilder($task)
->add('task', 'text')
->add('dueDate', 'date')
->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as saving the task to the database
if ($this->request->isXmlHttpRequest(){
//return data ajax requires.
}
return $this->redirect($this->generateUrl('task_success'));
}
}
// ...
}
我發現這種方法的問題是ISN非常優雅。我需要添加額外的檢查每一種形式。此外,如果說通過Zend_AMF發送請求,這個方法將不起作用。
有沒有更好的方法來做到這一點?