通过ajax呼叫时,在joomla中访问被拒绝

时间:2013-07-31 07:11:55

标签: php joomla

我有基于joomla ajax的模块,用于从db获取数据。我想使用此脚本从db

获取数据
    $db = JFactory::getDBO();
    $db->setQuery("my query");
    $db->query();
    $res = $db->loadAssocList();

但它给我的错误就像

    Fatal error: Class 'JFactory' not found in 

然后我将此代码放在页面顶部

    defined( '_JEXEC' ) or die( 'Restricted access' );

启用jFacotry并按预期启用它,但现在我无法进入此页面,因为我收到消息“限制访问”。

我应该怎么做才能解决这个问题。

3 个答案:

答案 0 :(得分:1)

据我了解你的问题,你想在外部文件中使用Joomla方法并调用该文件以通过ajax获取数据。如果我是正确的,我想说,默认情况下Joomla环境可以直接调用任何外部文件函数到模块。此外,您不能直接使用Joomla方法从数据库中获取结果,而不包括库文件。

建议:当我遇到同样的问题时,有一件事对我有用。我创建了一个自定义组件并在其中定义任务,从数据库中获取数据并通过ajax将该任务调用到我的模块并显示结果。这件事适合我。

尝试对任何自定义或现有组件控制器进行ajax调用,如下所示。

<script>
jQuery.ajax ({
        type: "GET",
        url: "index.php?option=com_custom&controller=custom&task=getdata",
        data: data,
        success: function(data) {
            alert(data)
    }
});
</script>

希望我的建议也能帮助您解决问题。祝你好运。

答案 1 :(得分:0)

首先,此代码检查是否定义了常量_JEXEC,如果没有,则显示“受限访问”错误。它没有加载或启用任何东西。

您使用的是哪个版本的Joomla?脚本(组件/模块)在哪里?

答案 2 :(得分:0)

如果您尝试使用ajax调用访问模块,则遵循正确的方法

$document = &JFactory::getDocument();
 $renderer = $document->loadRenderer('module');

 $Module = &JModuleHelper::getModule('mod_fmDataGrid');

 $Params = "param1=bruno\n\rparam2=chris";//This will only required when you pass module params through code
 $Module->params = $Params;
 echo $renderer->render($Module);

more

如果您尝试从当前页面访问它,您已加载框架工作,如下所示,但这不是一个好习惯。

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

more

尝试对下面的任何现有组件控制器进行ajax调用。

jQuery.ajax ({

        type: "GET",

        url: "index.php?option=com_virtuemart&controller=productdetails&ajax_request=1&task=addItemToWaitlist",
//controller components controller name
//task the function inside controller.
        data: data,

        success: function(data) {
            alert(data)
}});