不要去退出或死亡是,Joomla!有处理这些东西的好方法。
下面的答案在Joomla! 2.5 & 3(对于1.5也可以工作)。
一般
你URL的任务需要看起来像这样:
index.php?option=com_similar&task=abc&format=raw
你不是创建将使用视图控制器,假设某,其中将包含文件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?option=com_similar&controller=abc&format=raw
比你的子控制器名称(原始视图)需要abc.raw.php
。
这也意味着您将/可能会有2个名为Abc的子控制器。
如果返回JSON,它可能是有意义的使用format=json
和abc.json.php
。在Joomla 2.5。我有一些问题得到这个选项的工作(不知何故输出已损坏),所以我用原始。
如果您需要生成有效的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接口,如果您没有组件,或者您需要从您已有的模块发出请求。
你是什么意思“没有打印整个页面”?要不打印任何东西?另外,你不会显示完整的Ajax请求,它应该以})结束; 。 –
看截图。我没有写完整的Ajax,因为我不认为这很重要 – Jonuux
我没有看到预期的输出是什么?应该发生什么? –