为什么php spl_autoload_register和ajax不能一起工作?

时间:2013-06-11 16:49:59

标签: php ajax spl-autoload-register

这是我的index.php文件:

function Loader($class)
{
    $base=$_SERVER["DOCUMENT_ROOT"];

    if (file_exists($base.'/app/'.$class.'.php')) {
    include($base.'/app/'.$class.'.php');
    return true;
    }
  return false;
}

spl_autoload_register('Loader');
?>
<html>
<head>
</head>
<body>
<div id="container">
    </div>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>

在我的main.js文件中,我执行AJAX调用:

  $.ajax({
        type: 'POST',
        url: 'controllers/UserController.php',
        dataType: "json",
        data: {
            model: model,
            method: method
        },

        success: function(result) {

            if (typeof(template) != 'undefined'){

                $.get('http://localhost/heliox/templates/'+template, function(data)     {

                    $(target).empty();

                    $(target).html(_.template(data,{data:result}));

                });
            } 
        }
    });

在UserController.php文件中,我有:

Class UserController extends BaseController
{

    public function test()
    {
    echo "test";
    }
}

$UserController = new UserController;

当我在UserController文件中放置我的“Loader”函数时它工作正常并且加载了类BaseController,但是当函数在我的index.php文件中并且我执行AJAX调用时我得到:

  

致命错误:找不到类'BaseController'   第13行的D:\ xampp \ htdocs \ heliox \ controllers \ UserController.php。

2 个答案:

答案 0 :(得分:2)

通过ajax调用,您可以直接访问controllers/UserController.php。在这个文件中,你只有类声明,它扩展了其他类。此时PHP解释器对index.php及其中注册的自动加载功能一无所知,因此它无法解析文件,因为它对BaseController一无所知或在哪里搜索它。

你需要的是bootstraping - 将运行你的应用程序所必需的所有代码(比如注册自动加载器,包括库,加载配置文件等)放到一个文件中,这将直接访问每个文件。

答案 1 :(得分:0)

将其更改为:

$.ajax({
        type: 'POST',
        url: 'http://localhost/user/your_parameters',