这是我调用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");
});
});
答案 0 :(得分:28)
不要退出或死亡,Joomla!有这个处理这些东西的好方法。
以下答案在Joomla中进行了测试! 2.5& 3(1.5。可能也有效)。
常规强>
此任务的网址需要如下所示:
index.php?option=com_similar&task=abc&format=raw
你要创建将使用视图的控制器,让我们说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?option=com_similar&controller=abc&format=raw
比您的子控制器名称(对于原始视图)需要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接口,如果您还没有组件,或者您需要从已有的模块发出请求。
答案 1 :(得分:0)
如果您只想在某些HTML元素中包含响应输出,请将format = raw附加到您的URL,如上所述。然后你可以有这样的控制器功能:
function abc(){
//... handle the request, read variables, whatever
print "this is what I want to place in my html";
}
AJAX响应将输出您在控制器中打印/回显的所有内容。