我正在创建一个模块,在我的主 PHP 文件中添加了对 Javascript 文件的引用。在该 Javascript 文件中,我对 dom read 进行了 jQuery 调用,该调用执行 Ajax post 来获取 div 的初始内容。它发布到的 URL 是另一个 PHP 文件 (gateway.php),它是我的模块的一部分。 (此 gateway.php 调用远程服务器来获取内容。)
嗯,通常禁止直接访问模块文件。我可以注释掉禁止直接访问的代码行。即使这样做,由于某种原因,我的 gateway.php 似乎无法完全访问 Joomla 中的所有内容。例如,gateway.php 需要我的 helper.php 文件。我只是在做
require_once(dirname(__FILE__) . DS . 'helper.php');
据我所知,这是包含文件的标准方法。但是,我收到错误消息,显示 DS 未转换为 Joomla 中定义的值。它将 DS 视为字符串值。如果我将其更改为
require_once(dirname(__FILE__) . '/helper.php');
然后我收到直接访问禁止错误。
知道这里发生了什么或者在主 PHP 模块文件以外的文件中的 Joomla 模块中使用 Ajax 的正确方法吗?
defined( '_JEXEC' ) or die( 'Restricted access' );
的调用是有原因的:您希望最大限度地减少 Joomla 的入口点数量。要进行 AJAX/JSON 调用以从 Joomla 中检索数据,您需要创建一个小组件来配合您的模块。几个月前我写了一篇关于此的博客文章:
http://www.designvsdevelop.com/the-way-not-to-do-javascript-in-joomla
或在模块中使用 Ajax 调用,一些要求是:
A method must be defined in helper.php The request must include a module variable in the URL.Example:module=search for mod_search Optionally method variable can be used in the URL to replace default get method. Example: method=myFunction this will trigger
我的FunctionAjax
jQuery.ajax({
url: 'index.php?option=com_ajax&module=search&method=getData',
type: "post",
success :function(response){
console.log(response);
}
});
以上代码会触发search的helper.php中的getDataAjax方法 模块。
public static getDataAjax(){
//search records
}
<strong>Note</strong>: function must be static otherwise warnings will be thrown.