2013-04-02 21 views
1

我想要做的HTML:創建從JSON獲取與阿賈克斯

我有根據的Symfony2(PHP)的應用程序。一個簡單的動作返回的數據作爲JSON這樣

$headers = array(
     'Content-Type' => 'application/json' 
    ); 

    return new Response($data, 200, $headers); 

這個動作從JavaScript這樣調用

function loadData(action){ 
    $.ajax({ 
     type: "POST", 
     url: action, 
     success: function(data){ 
      console.log(data); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 
      alert(errorThrown); 
     } 
    }); 
} 

所以這看起來很基本至今。從控制檯中,我可以看到返回的正確數據。這些數據應放置在項目網站的某個位置。

問:

有沒有在JavaScript中創建JSON HTML的任何直接的方式?其實我想從項目的邏輯中分離出模板(樹枝)。因此,生成html例如是正確的在loadData方法中成功回調?

我可以通過返回html而不是json來繞過這個問題。但我想爲我的項目建立某種休息API,我認爲需要JSON來運輸。

任何意見或建議?請分享你的處理方式。

+0

當然,但你的json在哪裏。我的意思是你的json響應的示例 – Jai

+2

只是一個註釋,但對於JSON響應,您可以使用'Symfony \ Component \ HttpFoundation \ JsonResponse-> create()',而不需要發送自己的標頭或狀態。 – qooplmao

+0

「我可以通過返回html而不是json來繞過這個問題,但我想爲我的項目構建某種休息api,我認爲它需要json進行傳輸。」你能解釋一下嗎? – ianace

回答

2

您可以使用angular js。它有一個很好的事情symfony的

angular.module('myApp', []).config(function($interpolateProvider){ 
     $interpolateProvider.startSymbol('[[').endSymbol(']]'); 
    }; 
); 

它改變{{[[,讓你在嫩枝使用模板。

This將幫助json查詢角js。

+0

太好了。要試一試 –

0

看看Handlebars

您可以將JSON基本上傳遞到把手模板:

模板:

<script id="entry-template" type="text/x-handlebars-template"> 
    <div class="entry"> 
     <h1>{{title}}</h1> 
     <div class="body"> 
      {{body}} 
     </div> 
    </div> 
</script> 

的JS:

var source = $("#entry-template").html(), 
    template = Handlebars.compile(source), 
    context = {title: "My New Post", body: "This is my first post!"}, 
    html = template(context); 

結果:

<div class="entry"> 
    <h1>My New Post</h1> 
    <div class="body"> 
     This is my first post! 
    </div> 
</div> 
+0

在'twig'中使用了相同的語法'{{'所以在模板中使用它會有問題。有沒有什麼方法可以用'[[''例如? – Narek

+0

是的,原始標記:http://twig.sensiolabs.org/doc/tags/verbatim.html –

+0

在這種情況下,您將無法使用樹枝中的系統變量。 – Narek

1

獲取數據並將其發送回服務器?我認爲它不正確。

嘗試查看underscore.js(_.template()),以在客戶端使用接收的json對象進行模板化。

,並嘗試使用TWIG這樣的:

_.templateSettings = { 
    interpolate : /\[\[(.+?)\]\]/g 
}; 

var template = _.template("Hello [[ name ]]!"); 
template({name : "Mustache"}); 
=> "Hello Mustache!"