如何在Joomla组件中发出Ajax请求

如何在Joomla组件中发出Ajax请求,ajax,joomla,Ajax,Joomla,这是我调用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) {

这是我调用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测试!2.5和3(对于1.5,可能也适用)


概述

任务的URL需要如下所示:

function abc(){

//... handle the request, read variables, whatever
print "this is what I want to place in my html";

}
index.php?option=com\u simple&task=abc&format=raw

然后创建一个控制器,它将使用视图,比如Abc,它将包含文件view.raw.html(与普通视图文件相同)

下面是生成原始HTML响应的代码:

/controller.php

public function abc() 
{
    // Set view
    JRequest::setVar('view', 'Abc');
    parent::display();
}
<?php
defined('_JEXEC') or die;

jimport('joomla.application.component.view');

class SimilarViewAbc extends JView
{
    function display($tpl = null)
    {
        parent::display($tpl);
    }
}
<?php

echo "Hello World from /views/abc/tmpl/default.php";
/views/abc/view.raw.php

public function abc() 
{
    // Set view
    JRequest::setVar('view', 'Abc');
    parent::display();
}
<?php
defined('_JEXEC') or die;

jimport('joomla.application.component.view');

class SimilarViewAbc extends JView
{
    function display($tpl = null)
    {
        parent::display($tpl);
    }
}
<?php

echo "Hello World from /views/abc/tmpl/default.php";
您通常会将此代码放在控制器中(您将调用一个模型,该模型将返回您编码的数据-这是一个非常常见的场景)。如果需要进一步了解,还可以创建一个JSON视图(view.JSON.php),类似于原始示例


安全性

既然Ajax请求正在工作,现在还不要关闭页面。阅读下面的内容

别忘了检查请求是否伪造
JSession::checkToken()
在这里派上用场。阅读有关如何添加的文档


多语言网站

如果您不在请求中发送语言名称,Joomla可能不会翻译您想要的语言字符串

考虑以某种方式将lang参数附加到请求中(如
&lang=de


Joomla 3.2中的新功能!-


Joomla现在提供了一种在插件或模块中处理Ajax请求的轻量级方法。你可能想用Joomla!Ajax接口,如果您还没有组件,或者您需要从您已有的模块发出请求。

如果您只想在某个HTML元素中包含响应输出,请将format=raw追加到您的URL中,如上所述。然后您可以拥有如下控制器功能:

function abc(){

//... handle the request, read variables, whatever
print "this is what I want to place in my html";

}

AJAX响应将输出您在控制器中打印/回显的所有内容。

不打印整个页面是什么意思?不打印任何东西?此外,如果没有显示完整的ajax请求,则应以})结尾。看屏幕截图。我没有写完整的ajax,因为我认为这并不重要,我不知道预期的输出是什么?是否应该发生任何事情?例如,我想做简单的回声。结果是我用echo获得了整个页面,而不是echoafter echo语句,只需写exit。或者将任务代码粘贴到您的帖子中,这样就很容易理解了。很棒的帖子!需要注意的是,Joomla有时在ajax显示raw时遇到问题。由于这个原因,我不得不为ajax调用回显控制器的输出,而不是将其传递给视图。@Cleanshooter-我添加了一些关于处理转包器的信息。我在我的组件中大量使用ajax,到目前为止,我在处理这些东西时没有遇到任何问题。如果您有任何问题,请随意在这里发布一些代码,哪些代码不起作用,这样我们就可以收集更多关于Joomla的质量信息!作品谢谢。@ValentinDespa-您的view.raw.php代码中有一个输入错误。parrent::display($tpl)应该是parent::display($tpl)。@mozami-修复,谢谢。请随意编辑您发现的任何错误。@ValentinDespa试图对其进行编辑,但不接受1个字符的编辑:)感谢您提供了易于操作的解决方案!