Javascript 如何在Symfony2中正确使用AJAX
我正在尝试在单击按钮后使用AJAX运行控制器代码。从我收集的信息来看,这就是使用AJAX的目的……它从前端向后端发送响应,然后生成json响应 然而,我不知道如何正确地做到这一点。我不确定如何让AJAX成功运行控制器代码 我所能做的就是在成功后显示表,但我不希望在单击按钮之前运行控制器代码,因为这是AJAX的要点 Symfony似乎没有关于以下内容的文档: 这些堆栈溢出问题/答案对于我来说太旧了,或者对我没有帮助: 细枝:Javascript 如何在Symfony2中正确使用AJAX,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,我正在尝试在单击按钮后使用AJAX运行控制器代码。从我收集的信息来看,这就是使用AJAX的目的……它从前端向后端发送响应,然后生成json响应 然而,我不知道如何正确地做到这一点。我不确定如何让AJAX成功运行控制器代码 我所能做的就是在成功后显示表,但我不希望在单击按钮之前运行控制器代码,因为这是AJAX的要点 Symfony似乎没有关于以下内容的文档: 这些堆栈溢出问题/答案对于我来说太旧了,或者对我没有帮助: 细枝: 我认为您需要添加到已有的方法中的就是isXmlHttpRequest
我认为您需要添加到已有的方法中的就是
isXmlHttpRequest()
方法这是官方文件
因此:
/**
*
*@Route(“/control”,name=“control\u check”)
*@Template()
*/
公共功能控制检查操作(请求$Request)
{
如果($request->isXmlHttpRequest()){
//$request=$this->get('request');
//将上行代码替换为以下内容,这将获得一个特定的表单字段
$name=$request->request->get('name');//$name=$\u POST['name']
$em=$this->getDoctrine()->getManager();
$persons=array();
//更多代码
返回新的JsonResponse(数组('persons'=>$persons));
}
}
我可能遇到了同样的情况
在我的例子中,我忘记添加“use”语句。
别忘了加上这一行
use Symfony\Component\HttpFoundation\JsonResponse;
我附上我的检查点
【1】 检查服务器端应用程序日志
error_log("create json response OK" . "\n", 3, "/usr/local/var/log/php/error.log");
return new JsonResponse(array('persons' => $persons));
【2】 检查控制台调试器
打开chrome调试器(F12)->网络选项卡->“/control”(左导航)
因此,您可以确认“响应标题”
如果您发现“text/html”,我认为服务器端存在问题
【3】 正在检查symfony2调试器
您可以在同一选项卡【2】中找到symfony2调试器url
X-Debug-Token-Link:http://xxxxxxxxx/_profiler/xxxxx
您应该打开此探查器链接。
如果此问题来自服务器端,您可以发现任何问题。您的javascript代码是否已写入twig模板?它与上面的my twig位于同一文件中。您无法从javascript成功函数内部运行服务器端控制器代码。调用success时,您的responseData将具有controlCheckAction生成的任何json。然后需要javascript来呈现一个表。看看你是否能找到一个没有Symfony复杂化的ajax教程介绍。您需要首先了解基本知识。我确实忘记了将
Request$Request
参数添加到控制器函数中……因此,谢谢您,但我对什么是$Request->Request->get('name')感到困惑代码>给我。我这里没有表单字段可供使用……然后在按下提交按钮后,只需在controlCheckAction()
中的dump($request)
,查看可供您使用的内容。我真的不知道你打算实现什么。通常在模板中有一个
,它通过AJAX调用发送数据。
/**
*
* @Route("/control", name="control_check")
* @Template()
*/
public function controlCheckAction(Request $request)
{
if ($request->isXmlHttpRequest()) {
//$request = $this->get('request');
//replace the up line code with the folloging, which gets a particular form field
$name = $request->request->get('name'); // <=> $name = $_POST['name']
$em = $this->getDoctrine()->getManager();
$persons = array();
//more code
return new JsonResponse(array('persons' => $persons));
}
}
use Symfony\Component\HttpFoundation\JsonResponse;
error_log("create json response OK" . "\n", 3, "/usr/local/var/log/php/error.log");
return new JsonResponse(array('persons' => $persons));
[OK] Content-Type:application/json
[NG] Content-Type:text/html
X-Debug-Token-Link:http://xxxxxxxxx/_profiler/xxxxx