从jquery ajax调用php函数时出现include语句错误


calling php function from jquery ajax with include statement error

我的include语句有问题。我有几个php文件,它们是在最初加载页面时加载的,然后由jQueryajax调用再次调用。由于ajax调用,我在函数中没有php脚本,但当我从不同的位置调用它们时(ajax调用),我的include语句出现了错误。例如,我的主页包括以下php脚本:

<div id="controlPanelForm">
    <?php include "lib/getControlPanel.php"; ?>
</div>

以下是getControlPanel.php文件的前几行:

<?php
include_once("../etc/includes.php");
...do something...

这是ajax调用:

    function getControl(teamID)
{     $.ajax({
            type: "GET",
            data: {teamID: teamID},
            url: "./lib/getControlPanel.php",
            dataType: "html",
            async: true,
            success: function(response) 
            {
                $('#controlPanelForm').html(response);
            }
    });
}

所以问题是,当我从ajax调用中调用php脚本时,我会得到以下错误:

include_once(../etc/includes.php): failed to open stream: No such file or directory in 

如果我更改相对路径,主页面的原始include将不起作用。。。

如何解决此问题?

提前感谢!

include_once(../etc/includes.php): failed to open stream: No such file or directory in

此错误表明位于".."的文件/etc/includs.php’不存在。您可以使用getcwd()查看当前工作目录,以确定相对链接实际指向的位置。

然而,相对路径是一种痛苦。我从不使用它们。我的所有项目都包含一个config.php文件,其中包含配置值:

// paths and urls
define('SITE_PATH', '/var/www/my_website/');
define('SITE_URL', 'http://localhost/my_website/');

现在一切都可以是绝对的。修改您的示例:

<div id="controlPanelForm">
    <?php include SITE_PATH . 'lib/getControlPanel.php'; ?>
</div>

getControlPanel.hp:

<?php
include_once(SITE_PATH . 'etc/includes.php');

使用这些定义可以做更多的工作,例如创建加载文件的函数、发送重定向头等。

顺便说一句,在使用ajax调用进行调试之前,请始终使用web浏览器直接访问ajax页面来测试它。通过这种方式,您可以判断问题是php问题还是javascript问题。

您可以通过更正包含文件(includes.php)的路径来修复它。您可以将其引用为bolute或relative,这无关紧要。重要的是它被恰当地引用了。

话虽如此,我更喜欢绝对路径(使用常量来定义直到web/app根的路径)。

要找出正确的路径(无论您想使用相对路径还是绝对路径),请放下

echo phpinfo();

并查看DOCUMENT_ROOT或SCRIPT_FILENAME变量。