如何在Joomla组件中使用Jquery AJAX?

我正在Joomla开发网站,同时我遇到了问题,请帮我解决下面的问题

这是我的组件的文件夹结构

htdocs/Joomla/administrator/component/com_test/test.php,controller.php models/test.php controllers/test.php views/test/view.html.php view/test/tmpl/default.php 

现在在view.html.php我创建了一个表单,其中我使用jquery ajax代码进行usernmae可用性检查

但我没有得到如何结合所有的东西来得到usename可用或不可用的结果

这是我在test / view.html.php上编写的代码

  jQuery(document).ready(function(){ jQuery("#username").change(function () { var usr = jQuery("#username").val(); if (usr.length >= 2) { jQuery("#status").html(' Checking availability...'); jQuery.ajax({ type: "POST", url: "index.php?option=com_test&view=check_user", data: "username=" + usr, success: function (msg) { jQuery("#status").ajaxComplete(function (event, request, settings) { if (msg == 'OK') { jQuery("#username").removeClass('object_error'); // if necessary jQuery("#username").addClass("object_ok"); } else { jQuery("#username").removeClass('object_ok'); // if necessary jQuery("#username").addClass("object_error"); jQuery(this).html(msg); } }); } }); } });  
User Name :

我已经为上面的动作创建了以下文件夹结构,请告诉我在哪里弄错了

 view/check_user/view.html.php views/check_user/tmpl/default.php 

check_user / view.html.php中的代码

 getModel('test'); $userName = JRequest::getVar('username'); parent::display($tpl); } } ?> 

但是当我运行这段代码时…为什么http://localhost/Joomla/includes/js/joomla.javascript.js文件运行无限次…最后给出4个错误

现在我要修改/添加更多??? 请指导我….

引用任何有用的链接教导一步一步创建组件……这对我很有帮助

非常感谢

所有前端代码都应该在你的tmpl中,所以你的Ajax内容也应该在那里。 查看本教程,了解如何为Joomla创建MVC组件http://www.joomladevuser.com/tutorials/components(deadlink )。

我找到了解决方案。 您必须阻止joomla将模板和模块以及…附加到输出ajax数据。 为此,您必须在显示数据后添加此代码

 //after $this->display($tpl); global $mainframe; $mainframe->close(); 

在joomla 1.7及以上,你可以这样关闭它

 $app = &JFactory::getApplication(); $app->close(); 

这是正确的,Joomla将加载模块,组件,whatewer您的默认模板和Joomla核心需要…通过使用“&format = raw”改变此行为(这将迫使Joomla包含Joomla的“无”)或“&template = your_own_template_for_ajax“(这将迫使Joomla包含你自己的”没有“)。

我不知道“&format = raw”所以我使用自己的空模板进行ajax。 空模板对我来说很有意义 – 我可以按照我想要的方式自定义它(例如默认包含一些东西)。 “&format = raw”是不错的选择,但不是唯一的选择。 决定取决于你默认做什么/得到什么。

如何在前端制作这样的ajax模板?

您必须在前端\ templates \目录中创建一个新目录(例如“ajax”)。 然后把3个文件放在里面:

index.php

  

templateDetails.xml

 ...XML content.. 

有关如何正确创建templateDetails.xml的说明,请访问:
http://docs.joomla.org/Creating_a_basic_templateDetails.xml_file

index.php

  

这就是前端解决方案所需的全部内容。

通过这样调用来测试它: http : //www.example.com/index.php?template = ajax

这是前端的100%工作解决方案。 后端未经我测试。 我相信你还必须为后端创建一个单独的模板。 或以某种方式到达前端模板(目前对如何没有任何想法)……

1 – 复制joomla的主要index.phpjoomlaRoot/index.php )并将其重命名为任何名称(例如: joomlaRoot/ajax.php )。

2 – 禁用渲染方法( $mainframe->render();

3 – 在render方法行下复制此代码:

 /***/ $document =& JFactory::getDocument(); $content=$document->getBuffer(); foreach($content as $var){ foreach($var as $var2){ echo $var2; } } /**/ 

您可以使用:

url: "index.php?option=com_test&view=check_user& format=raw ",

这将阻止加载整个模板,但只会加载组件的输出,这是您调用ajax函数时实际需要的。

此外,您可以检查index2.php (而不是index.php ),它以类似的方式设计,以提供简单的输出,而无需渲染整个模板。

在ajax url中使用format=raw ,因为这只会显示没有任何模板的输出。

从上面给出的所有解决方案(Joomla 3.1)来看,对我来说没有任何作用。 所以我用这个解决方案。 在url中添加tmpl = component。

 index.php?option=com_photos&view=intphoto&id=1&tmpl=component