AJAX中的基本错误消息 - Symfony3

时间:2017-02-16 09:48:12

标签: php ajax symfony

我正在使用Symfony3(Ubuntu 16.04)开发PhpStorm.2016.3.2

我创建了一个功能齐全的AJAX请求。 我唯一缺少的是错误信息。

我有一个TextType.php(表单),我可以在其中编写内容和一个按钮,我可以在其中搜索结果,如果匹配,我的结果会显示,但如果错误,那么没有任何反应,我想在同一页面上显示消息错误,如“哎呀!什么都没有!”

在我看来,这是我的AJAX请求:

<script>
        $(document).ready(function () {
            $('.ajax').on('click', function(e){
                e.preventDefault();
                $.ajax({
                    url:'{{ (path("app_sort_restaurants")) }}',
                    type: "POST",
                    dataType: "json",
                    data: {
                        "city": $('#search_bar_city').val()
                    },
                    success: function (data)
                    {
                        var bloc = $('#ajax-results');
                        bloc.html('');
                        for(var i = 0; i < data.length; i++) {
                            bloc.append('<div><h2>' + data[i]['name'] + '</h2></div>'); 
                        }
                    },
                });
            });
            return false;
        });
    </script>

这是我的控制器:

public function ajaxSortRestaurantAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $restaurants = $em->getRepository('AppBundle:Restaurant')->findBy(array('city' => $request->request->get('city')));


    $formattedData = array();
    foreach ($restaurants as $restaurant) {
        $formattedData[] = array(
            'name' => $restaurant->getName(),
            'city' => $restaurant->getCity(),
        );
    }
    return new JsonResponse($formattedData);
}

我不知道是否应该在控制器或AJAX请求中进行这样的循环。 我知道error: function()遗失了,但我不知道该把它放到哪里才能使它正常工作。我在错误方面有点迷失。

为了向您展示正在发生的事情,实际上就像这样

此处正在运作

enter image description here

,这里不是

enter image description here

我想表现出“哎呀!什么都没有!”当搜索错误时。不是示例中的空白

如果有人有建议,我们必须表示赞赏

1 个答案:

答案 0 :(得分:1)

  

我知道有错误:function()缺失但我不知道在哪里使它正常工作。

这将添加到与success相同的级别,其他选项会传递给$.ajax(),这意味着您的代码可以

$(document).ready(function () {
        $('.ajax').on('click', function(e){
            e.preventDefault();
            $.ajax({
                url:'{{ (path("app_sort_restaurants")) }}',
                type: "POST",
                dataType: "json",
                data: {
                    "city": $('#search_bar_city').val()
                },
                success: function (data)
                {
                    var bloc = $('#ajax-results');
                    bloc.html('');
                    for(var i = 0; i < data.length; i++) {
                        bloc.append('<div><h2>' + data[i]['name'] + '</h2></div>'); 
                    }
                },
                error: function(xhr, status, error) {
                    // Handle error
                }
            });
        });
        return false;
    });

请注意the documentation:

中描述的参数

xhr是XMLHttpRequest,status是“描述发生的错误类型的字符串和可选的异常对象(如果发生的话)。”和error是一个字符串,显示HTTP状态代码的消息。例如“找不到”404。

评论后编辑

据我所知,让控制器返回错误也是一个问题。为此,您需要返回一个带有非200状态代码的Response对象,或者抛出异常。

这方面的一个例子是:

public function ajaxSortRestaurantAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $restaurants = $em->getRepository('AppBundle:Restaurant')->findBy(array('city' => $request->request->get('city')));


    $formattedData = array();
    foreach ($restaurants as $restaurant) {
        $formattedData[] = array(
            'name' => $restaurant->getName(),
            'city' => $restaurant->getCity(),
        );
    }

    if (0 === count($formattedData)) {
        return new Response("", 404);
    }

    return new JsonResponse($formattedData);
}

在上述情况下,如果没有要返回的格式化数据,将返回404。

完成此操作后,您可以使用Ajax选项error中的错误函数来显示您希望它显示的错误消息。