我有基于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并按预期启用它,但现在我无法进入此页面,因为我收到消息“限制访问”。
我应该怎么做才能解决这个问题。
答案 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);
如果您尝试从当前页面访问它,您已加载框架工作,如下所示,但这不是一个好习惯。
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)
}});