我試圖在單擊按鈕後使用AJAX運行我的控制器代碼。從我收集的信息來看,這就是您應該使用AJAX的原因......它會從前端向後端發送響應,然後生成json響應。如何在Symfony2中正確使用AJAX
但我無法弄清楚如何正確地做到這一點。我不確定如何讓AJAX成功運行控制器代碼。
所有我已經能夠做的就是展示在成功的表,但我不希望控制器代碼運行按鈕被點擊,直到,因爲這是AJAX的點。
的Symfony似乎並不對此有文檔:http://symfony.com/legacy/doc/book/1_0/en/11-Ajax-Integration
而且這些堆棧溢出的問題/答案是太老了我的使用或不幫我:
How to integrate Ajax with Symfony2
How to make a POST Ajax request with Symfony and Jquery
嫩枝:
<button id="begin-check" type="button">Run Test</button>
<table class="stab">
<thead>
<tr>
<th style="text-align: center">Ang</th>
<th style="text-align: center">Lat</th>
</tr>
<tr>
<th>Name & Age</th>
<th>Name & Age</th>
</tr>
</thead>
<tbody>
{% for person in persons %}
<tr>
<td>
<a href="{{ path('users_edit', { 'id': person[0] }) }}">
{{ person[1] }}, {{ person[2] }}
</a>
</td>
<td>
{% if person[7] == 'Moe' %}
<a href="{{ path('edit', { 'id': person[6] }) }}">
{% else %}
<a href="{{ path('low_edit', { 'id': person[8] }) }}">
{% endif %}
{{ person[4] }}, {{ person[5] }}
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
AJAX:
<script type="text/javascript">
$(document).ready(function(){
$(document).on('click', "#begin-check", function(e){
console.log('You have clicked');
e.preventDefault();
$.ajax({
method: 'POST',
url: "{{ path('control_check') }}",
data: { //research what to put here
},
success: function(responseData){
//run the controller code
//Show HTML table
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(xhr.responseText);
console.log(thrownError);
},
})
});
});
</script>
在控制器:
/**
*
* @Route("/control", name="control_check")
* @Template()
*/
public function controlCheckAction()
{
$request = $this->get('request');
$em = $this->getDoctrine()->getManager();
$persons = array();
//more code
return new JsonResponse(array('persons' => $persons));
}
是你的javascript代碼插入樹枝模板嗎? –
它與上面的我的樹枝在同一個文件中 – grgre
您不能在JavaScript成功函數中運行嚴重的側控制器代碼。當調用成功時,responseData將擁有controlCheckAction生成的任何json。然後您需要javascript來渲染表格。看看你是否能找到一個好的介紹Ajax教程,而沒有Symfony的複雜性。你需要首先理解基礎知識。 – Cerad