Symfony& Ajax错误404,Symfony工具栏中没有错误消息

时间:2017-03-14 22:17:45

标签: javascript php jquery ajax symfony

我正在使用Symfony开发一个Web应用程序,但是我遇到了一些Ajax问题。

我想按下一些带有id(1,2,3,4 ...)的按钮和dynamicaly(用ajax)在我的数据库中搜索一些与这些id相关的东西。

我的javascript代码:

appP08.controls.btnZone.on('click', function(){
        var ZoneID = $(this).attr('id');
        var ZoneName = $(this).text();
        alert(ZoneID);

        $.ajax({
            url: "/recor/circuit",
            type: "POST",
            data: {
                ZoneID: ZoneID
            }, 
            success: function(data){
                $('#divCircuit').html(data);
                $('#zoneChoice').text(' - ' + ZoneName);
                appP08.controls.divZone.hide();
            }
        });
    });

当我按下按钮时,Ajax被执行并且我看到警报,所以Jquery运行良好。但之后没有任何反应。

我创建了一条路线:

mk_reappro_production_circuit:
    path:    /recor/circuit
    defaults: {_controller: MKReapproProductionBundle:Appli:circuit }
    methods: [post]

控制器:

    public function circuitAction(Request $req){
    $req = $this->getRequest();
    if ($req->isXMLHttpResult()){
        $id = $req->request->get('ZoneID');

        if($id != null){
            $repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit');
            $listCircuits = $repository->findAll($id);

            return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
                'listCircuits' => $listCircuits
            ));
        } 
    }
  }

观点:

{% extends "MKReapproProductionBundle::layout.html.twig" %}

{% block mk_appli_train_body_circuit %}

<div id="divCircuit">
    {% for circuit in listCircuits %}
    <button class="btn btn-success" name="btnZone">
        {{ circuit.name }}
    </button>
    {% endfor %}
</div>

{% endblock %}

如何显示此按钮? 在Symfony工具栏中就是这样: Symfony Toolbar Message Error

2 个答案:

答案 0 :(得分:1)

我认为错误是因为Symfony找不到路径,因为你没有正确生成它。试试这个:

&#13;
&#13;
appP08.controls.btnZone.on('click', function(){
        var ZoneID = $(this).attr('id');
        var ZoneName = $(this).text();
        alert(ZoneID);

        $.ajax({
            url: "{{ path('mk_reappro_production_circuit') }}", //Change this line.
            type: "POST",
            data: {
                ZoneID: ZoneID
            }, 
            success: function(data){
                $('#divCircuit').html(data);
                $('#zoneChoice').text(' - ' + ZoneName);
                appP08.controls.divZone.hide();
            }
        });
   });
&#13;
&#13;
&#13;

使用{{ path('mk_reappro_production_circuit') }},Symfony将负责生成正确的路径。

作为附加评论,在控制器中:

    public function circuitAction(Request $req){
    $req = $this->getRequest(); //This line is not necessary, you are passing the $req variable directly to the function.
    if ($req->isXMLHttpResult()){
        $id = $req->request->get('ZoneID');

        if($id != null){
            $repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit');
            $listCircuits = $repository->findAll($id);

            return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
                'listCircuits' => $listCircuits
            ));
        } 
    }
  }

<强>编辑:

当然,{{ path('mk_reappro_production_circuit') }}适用于树枝模板,因为path是树枝变量。如果要导入外部js文件,则必须在twig模板中创建一个可在js中使用的全局变量。像这样:

&#13;
&#13;
{% block js %}
    <script type="text/javascript">
        var path = "{{ path('mk_reappro_production_circuit') }}";
    </script>
{% endblock %}
&#13;
&#13;
&#13; 此语句必须首先出现在您的js文件中。

现在,在你的js中:

appP08.controls.btnZone.on('click', function(){
        var ZoneID = $(this).attr('id');
        var ZoneName = $(this).text();
        alert(ZoneID);

        $.ajax({
            url: path, //Change this line.
            type: "POST",
            data: {
                ZoneID: ZoneID
            }, 
            success: function(data){
                $('#divCircuit').html(data);
                $('#zoneChoice').text(' - ' + ZoneName);
                appP08.controls.divZone.hide();
            }
        });
   });

您找到的解决方案并不正确,因为如果您从开发环境更改为生产环境,则生成的路由将再次出现错误。

答案 1 :(得分:0)

这是路径错误。

我在我的js文件中更正了它:

path: "http://" + location.host,

$.ajax({
            url: selfObject.path + "/SymfonyReapproProduction/web/app_dev.php/appli/circuit",

我仍然不明白为什么{{ path('mk_reappro_production_circuit') }}不起作用。