Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Symfony2中正确使用AJAX_Javascript_Php_Jquery_Ajax_Symfony - Fatal编程技术网

Javascript 如何在Symfony2中正确使用AJAX

Javascript 如何在Symfony2中正确使用AJAX,javascript,php,jquery,ajax,symfony,Javascript,Php,Jquery,Ajax,Symfony,我正在尝试在单击按钮后使用AJAX运行控制器代码。从我收集的信息来看,这就是使用AJAX的目的……它从前端向后端发送响应,然后生成json响应 然而,我不知道如何正确地做到这一点。我不确定如何让AJAX成功运行控制器代码 我所能做的就是在成功后显示表,但我不希望在单击按钮之前运行控制器代码,因为这是AJAX的要点 Symfony似乎没有关于以下内容的文档: 这些堆栈溢出问题/答案对于我来说太旧了,或者对我没有帮助: 细枝: 我认为您需要添加到已有的方法中的就是isXmlHttpRequest

我正在尝试在单击按钮后使用AJAX运行控制器代码。从我收集的信息来看,这就是使用AJAX的目的……它从前端向后端发送响应,然后生成json响应

然而,我不知道如何正确地做到这一点。我不确定如何让AJAX成功运行控制器代码

我所能做的就是在成功后显示表,但我不希望在单击按钮之前运行控制器代码,因为这是AJAX的要点

Symfony似乎没有关于以下内容的文档:

这些堆栈溢出问题/答案对于我来说太旧了,或者对我没有帮助:

细枝:


我认为您需要添加到已有的方法中的就是
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