我正在创建一个Joomla组件。 在前端的视图中,我有一个带有2个下拉菜单的表单,从第1个选择一个选项,第2个选项必须相应地更改。 为此,我正在使用AJAX。
我可以将请求发送到置于controller.php文件中的php函数,php函数会生成正确的输出。
问题是Joomla框架将此输出放在包含所有元标记,标题,模板等的页面中,因为它应该在浏览器上显示,然后再将其返回给AJAX。 你可以从firebug看到我收到的截图。 我要放下拉菜单的div是-div id =“select-formatocarta” - 你可以看到在“选择”之前我有很多其他不需要的东西。 http://img695.imageshack.us/img695/7725/selectp.jpg
结果是在div里面我想只放置由php函数生成的“select”菜单,我得到整页。即使我可以显示从AJAX请求传递tmpl = component参数的唯一菜单,div高度就像整个页面都在其中。
如何在没有Joomla模板的情况下收到唯一的php函数输出? 如果那不可能,我如何从responseText中提取唯一的下拉菜单? 我只能使用javascript,我没有原型或jquery可用。
答案 0 :(得分:2)
退出。
因此,Joomla将首先评估您的组件代码,然后通过模板系统添加页眉/页脚(这就是为什么组件动态可以为CSS添加标题行等)。所以你需要做的就是立即退出,阻止Joomla添加页眉/页脚。
所以在你的控制器代码中,你会有类似的东西:
<?php
function ajax_foo()
{
...code here...
$view->display();
jexit();
}
内置的PHP exit()
函数也可以正常工作,但首选jexit()
。
答案 1 :(得分:2)
您需要在名为ajax.raw.php的/ components / com_yourcomponent / controllers /文件夹中创建一个子控制器
然后您可以像这样发送ajax请求:
?的index.php选项= com_name&安培;任务= ajax.function_name&安培;格式=生&安培; VAR =值
答案 2 :(得分:0)
您不必为此创建新的控制器。您只需使用现有的控制器,并将&amp; format = raw附加到URL即可。这将关闭Joomla的所有输出。为ajax调用创建一个特殊的控制器只是一个很好的做法,以防你的组件很大而且难以维护。
使用jexit();简单地压低输出是绝对不好的。