我有一个Ajax调用,它运行来自file1.php的函数,并且运行良好。但是,当我从file2.php文件中调用另一个函数时,它不会运行并返回错误。
我的简化设置:
//functions.php
require('dir1/php1.php');
require('dir2/php2.php');
//php1.php
function func1(){
echo 'Hello world';
echo func2();
}
//php2.php
function func2(){
return 'Hello again';
}
现在,func1()已在第一个页面加载上运行。所以我知道func1()和func2()可以正常工作。但是看起来Ajax调用忘记了所有require()。因为当我将func1()更改为此并添加require时,它可以正常工作:
//php1.php
function func1(){
require('dir2/php2.php');
echo 'Hello world';
echo func2();
}
起初我以为,嗯,如果它能工作的话,就可以在这个电话上工作了。但是现在我要说的是,我想从更多文件中调用更多不同的函数。我是否应该一直需要所有这些文件?这感觉是错误的方法。另外,我还想从我不知道其路径的插件中调用函数。 (我能找出来,但这不是重点)
-编辑- 我发现运行ajax调用时不会重新加载任何必需的文件。 Ajax不会重新运行包含主题-> functions.php中所有代码的代码吗?这具有重要的调用代码。
答案 0 :(得分:0)
是的,您应该在实际需要该资源的文件中调用require
。当包含php1
中的functions
时,它将拉出依赖关系。
但是,由于您使用的是wordpress,因此您应该使用wp_ajax
注册ajax函数,而不要直接直接调用该文件。
答案 1 :(得分:0)
如果您正在使用wordpress ajax(wp_ajax),那么这是合乎逻辑的。
您的第一个代码:
您正在通过浏览器链接发出请求,因此文件 DIR路径是正确的。 从当前文件目录到您需要的文件。
您的第二个代码:
您通过ajax(wp-admin / admin-ajax.php)发出请求,那么目录将不同。原因是,wordpress只是触发了此 admin-ajax.php 文件中的功能,并从该目录中搜索文件。
因此,我建议将完整目录路径与path / to / file一起放置。 要求(完整/目录/路径/到/文件)。
答案 2 :(得分:0)
这就是我最终要做的。
在main functions.php上,我需要一个名为includes.php的外部文件。从此文件中,我需要我通常需要的所有文件(不仅仅是func1())。每当我进行Ajax调用时,我都会先处理include.php。这将重新运行所有需求。我确实要注意它们必须是require_once(),否则它将找到您正在从中调用它的文件并崩溃。它将尝试重新声明它已经具有的功能。
我觉得这不是最干净的方法。但是,当我有更多时间查看WP如何实际处理Ajax时,我将不得不稍后进行检查。