我正在使用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()
遗失了,但我不知道该把它放到哪里才能使它正常工作。我在错误方面有点迷失。
为了向您展示正在发生的事情,实际上就像这样
此处正在运作
,这里不是
我想表现出“哎呀!什么都没有!”当搜索错误时。不是示例中的空白
如果有人有建议,我们必须表示赞赏
答案 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;
});
中描述的参数
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
中的错误函数来显示您希望它显示的错误消息。