Php 通过ajax调用时,joomla拒绝访问

Php 通过ajax调用时,joomla拒绝访问,php,joomla,Php,Joomla,我有基于joomlaajax的模块,用于从数据库获取数据。我想使用这个脚本从数据库中获取数据 $db = JFactory::getDBO(); $db->setQuery("my query"); $db->query(); $res = $db->loadAssocList(); 但它给了我类似的错误 Fatal error: Class 'JFactory' not found in 然后我把这个代码放在页面的顶部 d

我有基于joomlaajax的模块,用于从数据库获取数据。我想使用这个脚本从数据库中获取数据

    $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,它已按预期启用,但现在我无法进入此页面,因为我收到一条消息“受限访问”


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

首先,检查常量
\u JEXEC
是否已定义,如果未定义,则显示“受限访问”错误。它没有加载或启用任何内容


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

如果您试图使用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);
为了

如果你试图从当前页面访问它,你已经像下面一样加载了框架,但这不是一个好的做法

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' );
为了

尝试对任何现有的组件控制器进行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)
}});
<script>
jQuery.ajax ({
        type: "GET",
        url: "index.php?option=com_custom&controller=custom&task=getdata",
        data: data,
        success: function(data) {
            alert(data)
    }
});
</script>

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

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

尝试对任何自定义或现有的组件控制器进行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)
}});
<script>
jQuery.ajax ({
        type: "GET",
        url: "index.php?option=com_custom&controller=custom&task=getdata",
        data: data,
        success: function(data) {
            alert(data)
    }
});
</script>

jQuery.ajax({
键入:“获取”,
url:“index.php?option=com\u custom&controller=custom&task=getdata”,
数据:数据,
成功:功能(数据){
警报(数据)
}
});

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

我正在使用joomla 3.1,是的,它在所有其他页面上都可以正常工作,但只有在通过ajax调用的页面上有问题,并且我的脚本在模块文件夹中。此错误是由于joomla框架无法从您的页面访问。否,我没有通过ajax访问整个模块,但我有模块和内部这个模块我对一个页面进行了ajax调用,但由于我在顶部提到的那行代码,该页面受到了限制。你能将ajax调用的代码粘贴到哪个组件上吗?jQuery.ajax({type:“POST”,url:,data:“page=”+page+'&str='+str,success:function(msg){jQuery(“#container”).ajaxComplete(function(事件、请求、设置){jQuery(#container”).html(msg);} }); }通过这种方式,您试图通过ajax访问模块文件。该文件不在框架ie中,您不能对这样的模块进行ajax调用。您必须对与此模块相关的组件进行ajax调用,如index.php?option=com_users&task=profile.mytask¶m=1等