如何在Joomla组件中发出Ajax请求
这是我调用ajax请求时获得的屏幕截图:
如何在不打印整个页面的情况下仅运行任务?这是我的ajax电话: $.ajax ({ type: "POST",url: "index.php?option=com_similar&task=abc",data: { id: id,name: name,similar_id: similar_id,},cache: false,success: function(html) { $("#flash").fadeOut("slow"); $("#content"+similar_id).html(html); } }); }); $(".close").click(function() { $("#votebox").slideUp("slow"); }); });
不要退出或死,Joomla!有它处理这些东西的好方法.
以下答案在Joomla中进行了测试! 2.5& 3(1.5.也可以). 一般 您的任务URL需要如下所示: ?index.php文件选项= com_similar和放大器;任务= ABC&放大器;格式=原 你要创建将使用视图的控制器,让我们说Abc,它将包含文件view.raw.html(与普通视图文件相同). 下面是生成原始HTML响应的代码: /controller.php public function abc() { // Set view JRequest::setVar('view','Abc'); parent::display(); } /views/abc/view.raw.php <?php defined('_JEXEC') or die; jimport('joomla.application.component.view'); class SimilarViewAbc extends JView { function display($tpl = null) { parent::display($tpl); } } /views/abc/tmpl/default.php <?php echo "Hello World from /views/abc/tmpl/default.php"; 注意:如果我必须返回HTML(它更干净并遵循Joomla逻辑),这是我将使用的解决方案.要返回简单的JSON数据,请参阅下面的内容如何将所有内容放入控制器中. 如果您向子控制器发出Ajax请求,例如: 的index.php选项= com_similar&安培;控制器= ABC&安培;格式=生 比你的子控制器名称(原始视图)需要是abc.raw.php. 这也意味着您将/可能有2个名为Abc的子控制器. 如果返回JSON,则使用format = json和abc.json.php可能是有意义的.在Joomla 2.5.我有一些问题让这个选项工作(不知何故输出已损坏),所以我用raw. 如果您需要生成有效的JSON响应,请查看文档页面Generating JSON output // We assume that the whatver you do was a success. $response = array("success" => true); // You can also return something like: $response = array("success" => false,"error"=> "Could not find ..."); // Get the document object. $document = JFactory::getDocument(); // Set the MIME type for JSON output. $document->setMimeEncoding('application/json'); // Change the suggested filename. JResponse::setHeader('Content-Disposition','attachment;filename="result.json"'); echo json_encode($response); 您通常会将此代码放在控制器中(您将调用一个模型,该模型将返回您编码的数据 – 这是一种非常常见的情况).如果您需要更进一步,您还可以创建一个JSON视图(view.json.php),类似于原始示例. 安全 既然Ajax请求正在运行,请不要关闭页面.参见下文. 不要忘记检查伪造请求. JSession :: checkToken()在这里派上用场.阅读有关如何添加CSRF anti-spoofing to forms的文档 多语言网站 如果您不在请求中发送语言名称,Joomla可能不会翻译您想要的语言字符串. 考虑以某种方式将lang param附加到您的请求中(例如& lang = de). Joomla 3.2中的新功能! – Joomla! Ajax Interface Joomla现在提供了一种在插件或模块中处理Ajax请求的轻量级方法.你可能想要使用Joomla! Ajax接口,如果您还没有组件,或者您需要从已有的模块发出请求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |