Symfony2 如何使 Ajax 请求与学说更新
Symfony2 how to make Ajax Request with doctrine update
我正在为我的网站的编辑页面开发一个界面。使用了 CKeditor。我想使用 Ajax 方法来保存修改。我的文字是数据库中的股票。我用 Doctrine 访问他。
脚本jQuery
$(".loading").hide();
$('[name="contentsForm"]').submit(function() {
$('[name="contentsForm"]').hide();
$("#contents .loading").show();
$.ajax({
type: "POST",
url: "{{ path('AdminAjaxEditText', {'page' : 'index', 'description' : 'contents'})}}",
data: "{'data': '" + $('#contentsForm_data').val() + "'}",
cache: false,
success: function(data){
$('[name="contentsForm_data"]').html(data);
CKupdate();
$('[name="contentsForm"]').show();
$("#contents .loading").hide();
}
});
return false;
});
控制器php
public function ajaxEditAction($page, $description, Request $request) {
$em = $this->getDoctrine()->getManager();
$text = $em->getRepository("FDMWebsiteBundle:Text")->find(array("page" => $page, "description" => $description));
$form = $this->get('form.factory')->createNamed($description."Form", new TextType(), $text);
if ($form->handleRequest($request)->isValid()) {
$em->flush();
}
return $this->render("Bundle:Admin:textForm.html.twig", array(
"form" => $form->createView()
));
}
模板树枝
{{ form_start(form, {'action': ''}, {'method': 'POST'}) }}
{{ form_errors(form) }}
{{ form_widget(form.data, { 'attr': {'class': 'ckeditor'} }) }}
<input type="submit" class="saveTextBtn btn btn-primary pull-right" value="Enregistrer"/>
<div class="clearfix"></div>
{{ form_rest(form) }}
{{ form_end(form) }}
我的问题是什么时候单击保存 Ajax 运行 但我的数据库中没有保存任何内容?
我做错了什么?
我不明白为什么我的代码在 Ajax 请求后没有刷新,而是显示在 textarea 中。
对不起我的英语,我正在学习...
我找到了我的问题s
首先我需要将字符集设置为 utf-8 并从 CKEditor 获取数据而不是从文本区域获取数据
scriptCharset: "utf-8",
data: "data=" + CKEDITOR.instances['contentsForm_data'].getData()
http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#getData
其次:我的 ajax 控制器需要使用 getter 的请求。表单的 handleRequest 方法不起作用,我不知道为什么。如果有人能给我一个解释,我正在寻找它。
if($request->isXmlHttpRequest()) {
$data = $request->request->get('data');
$text->setData($data);
$em->flush();
}
教程和一些 post 使用此解决方案,但我不明白为什么 handlerResquest 会失败?
第三:我需要配置CKEDITOR不使用实体
CKEDITOR.config.entities = false;
http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-entities
我正在为我的网站的编辑页面开发一个界面。使用了 CKeditor。我想使用 Ajax 方法来保存修改。我的文字是数据库中的股票。我用 Doctrine 访问他。
脚本jQuery
$(".loading").hide();
$('[name="contentsForm"]').submit(function() {
$('[name="contentsForm"]').hide();
$("#contents .loading").show();
$.ajax({
type: "POST",
url: "{{ path('AdminAjaxEditText', {'page' : 'index', 'description' : 'contents'})}}",
data: "{'data': '" + $('#contentsForm_data').val() + "'}",
cache: false,
success: function(data){
$('[name="contentsForm_data"]').html(data);
CKupdate();
$('[name="contentsForm"]').show();
$("#contents .loading").hide();
}
});
return false;
});
控制器php
public function ajaxEditAction($page, $description, Request $request) {
$em = $this->getDoctrine()->getManager();
$text = $em->getRepository("FDMWebsiteBundle:Text")->find(array("page" => $page, "description" => $description));
$form = $this->get('form.factory')->createNamed($description."Form", new TextType(), $text);
if ($form->handleRequest($request)->isValid()) {
$em->flush();
}
return $this->render("Bundle:Admin:textForm.html.twig", array(
"form" => $form->createView()
));
}
模板树枝
{{ form_start(form, {'action': ''}, {'method': 'POST'}) }}
{{ form_errors(form) }}
{{ form_widget(form.data, { 'attr': {'class': 'ckeditor'} }) }}
<input type="submit" class="saveTextBtn btn btn-primary pull-right" value="Enregistrer"/>
<div class="clearfix"></div>
{{ form_rest(form) }}
{{ form_end(form) }}
我的问题是什么时候单击保存 Ajax 运行 但我的数据库中没有保存任何内容?
我做错了什么?
我不明白为什么我的代码在 Ajax 请求后没有刷新,而是显示在 textarea 中。
对不起我的英语,我正在学习...
我找到了我的问题s
首先我需要将字符集设置为 utf-8 并从 CKEditor 获取数据而不是从文本区域获取数据
scriptCharset: "utf-8",
data: "data=" + CKEDITOR.instances['contentsForm_data'].getData()
http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#getData
其次:我的 ajax 控制器需要使用 getter 的请求。表单的 handleRequest 方法不起作用,我不知道为什么。如果有人能给我一个解释,我正在寻找它。
if($request->isXmlHttpRequest()) {
$data = $request->request->get('data');
$text->setData($data);
$em->flush();
}
教程和一些 post 使用此解决方案,但我不明白为什么 handlerResquest 会失败?
第三:我需要配置CKEDITOR不使用实体
CKEDITOR.config.entities = false;
http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-entities