我正在使用Symfony开发一个Web应用程序,但是我遇到了一些Ajax问题。
我想按下一些带有id(1,2,3,4 ...)的按钮和dynamicaly(用ajax)在我的数据库中搜索一些与这些id相关的东西。
我的javascript代码:
appP08.controls.btnZone.on('click', function(){
var ZoneID = $(this).attr('id');
var ZoneName = $(this).text();
alert(ZoneID);
$.ajax({
url: "/recor/circuit",
type: "POST",
data: {
ZoneID: ZoneID
},
success: function(data){
$('#divCircuit').html(data);
$('#zoneChoice').text(' - ' + ZoneName);
appP08.controls.divZone.hide();
}
});
});
当我按下按钮时,Ajax被执行并且我看到警报,所以Jquery运行良好。但之后没有任何反应。
我创建了一条路线:
mk_reappro_production_circuit:
path: /recor/circuit
defaults: {_controller: MKReapproProductionBundle:Appli:circuit }
methods: [post]
控制器:
public function circuitAction(Request $req){
$req = $this->getRequest();
if ($req->isXMLHttpResult()){
$id = $req->request->get('ZoneID');
if($id != null){
$repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit');
$listCircuits = $repository->findAll($id);
return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
'listCircuits' => $listCircuits
));
}
}
}
观点:
{% extends "MKReapproProductionBundle::layout.html.twig" %}
{% block mk_appli_train_body_circuit %}
<div id="divCircuit">
{% for circuit in listCircuits %}
<button class="btn btn-success" name="btnZone">
{{ circuit.name }}
</button>
{% endfor %}
</div>
{% endblock %}
如何显示此按钮? 在Symfony工具栏中就是这样:
答案 0 :(得分:1)
我认为错误是因为Symfony找不到路径,因为你没有正确生成它。试试这个:
appP08.controls.btnZone.on('click', function(){
var ZoneID = $(this).attr('id');
var ZoneName = $(this).text();
alert(ZoneID);
$.ajax({
url: "{{ path('mk_reappro_production_circuit') }}", //Change this line.
type: "POST",
data: {
ZoneID: ZoneID
},
success: function(data){
$('#divCircuit').html(data);
$('#zoneChoice').text(' - ' + ZoneName);
appP08.controls.divZone.hide();
}
});
});
&#13;
使用{{ path('mk_reappro_production_circuit') }}
,Symfony将负责生成正确的路径。
作为附加评论,在控制器中:
public function circuitAction(Request $req){
$req = $this->getRequest(); //This line is not necessary, you are passing the $req variable directly to the function.
if ($req->isXMLHttpResult()){
$id = $req->request->get('ZoneID');
if($id != null){
$repository = $this->getDoctrine()->getManager()->getRepository('MKReapproProductionBundle:Circuit');
$listCircuits = $repository->findAll($id);
return $this->render('MKReapproProductionBundle:Appli:circuit.html.twig', array(
'listCircuits' => $listCircuits
));
}
}
}
<强>编辑:强>
当然,{{ path('mk_reappro_production_circuit') }}
适用于树枝模板,因为path
是树枝变量。如果要导入外部js文件,则必须在twig模板中创建一个可在js中使用的全局变量。像这样:
{% block js %}
<script type="text/javascript">
var path = "{{ path('mk_reappro_production_circuit') }}";
</script>
{% endblock %}
&#13;
现在,在你的js中:
appP08.controls.btnZone.on('click', function(){
var ZoneID = $(this).attr('id');
var ZoneName = $(this).text();
alert(ZoneID);
$.ajax({
url: path, //Change this line.
type: "POST",
data: {
ZoneID: ZoneID
},
success: function(data){
$('#divCircuit').html(data);
$('#zoneChoice').text(' - ' + ZoneName);
appP08.controls.divZone.hide();
}
});
});
您找到的解决方案并不正确,因为如果您从开发环境更改为生产环境,则生成的路由将再次出现错误。
答案 1 :(得分:0)
这是路径错误。
我在我的js文件中更正了它:
path: "http://" + location.host,
$.ajax({
url: selfObject.path + "/SymfonyReapproProduction/web/app_dev.php/appli/circuit",
我仍然不明白为什么{{ path('mk_reappro_production_circuit') }}
不起作用。