如何使用Symfony从ajax请求中正确返回html模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Symfony从ajax请求中正确返回html模板相关的知识,希望对你有一定的参考价值。

我想知道如何从ajax调用正确返回html模板(SEO友好)。

在我的应用程序中,我使用2种不同的方式来返回响应:

对于简单模板:

public function ajaxCallAction() {
//.....
    $response = array(
        "code"      => 202, 
        "success"   => true,
        "simpleData" => $simpleData
    );

    return new JsonResponse($response); 
}

在JS中,我做了类似的事情:

$("div#target").click(function(event) {
    $.ajax({
        type: "POST",
        success: function(response) {
            if(response.code === 202 && response.success) {
                $("div#box").append(response.simpleData);    
            }
        }
    });
});

对于complexe模板(超过20行和各种var):

public function ajaxCallAction() {
    //...
    $listOfObjects = $repo->findAll(); 
    $viewsDatas = [
        'listOfObjects' => $listOfObjects,
        //....other vars
    ];

    return $this->render('myAppBundle:template:complexTemplate.html.twig', $viewsDatas);

    //in complexTemplate.html.twig, I loop on listOfObjects for example...
}

对于这种调用,JS看起来像:

$("div#target").click(function(event) {
    $.ajax({
        type: "POST",
        success: function(response) {
            $("div#box").append(response);    
        }
    });
});

所有这些方法都有效,但是第二个方法,我们没有状态代码(这有关系吗?)我知道返回直接格式化的html模板可能很重(根据例如这个主题Why is it a bad practice to return generated HTML instead of JSON? Or is it?)。

你们是怎么做ajax电话的?这里的最佳做法是什么?

答案

在我的应用程序中,我通常使用类似的东西:

$response = array( 
"code" => 200,
"response" => $this->render('yourTemplate.html.twig')->getContent() );

希望这有帮助!

编辑

要返回您的回复,您应该使用文档中解释的JsonResponseas:http://symfony.com/doc/current/components/http_foundation.html#creating-a-json-response

只需使用:

return new JsonResponse($response);

以上是关于如何使用Symfony从ajax请求中正确返回html模板的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Symfony 和 Jquery 发出 POST Ajax 请求

最佳实践以及如何在 Symfony2 中找到从 iOS AFNetworking 获取 POST 数据并在 GET 中返回 JSON?

symfony2 安全 - 禁用登录路径并显示禁止

如何在 Symfony 2 中 login_check 后禁用重定向

如何使用一个ajax请求从java servlet返回多个json对象

Symfony2 在 AJAX 调用中返回空 JSON,而变量不为空