0

これは私の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 ファイル内に配置すると、正常に動作し、クラス BaseController がロードされますが、関数が index.php ファイル内にあり、AJAX 呼び出しを行うと、次のようになります。

致命的なエラー: 13 行目の D:\xampp\htdocs\heliox\controllers\UserController.php にクラス 'BaseController' が見つかりません。

4

2 に答える 2

2

ajax 呼び出しを使用すると、controllers/UserController.php直接アクセスしています。このファイルには、他のクラスを拡張するクラス宣言のみがあります。この時点で、PHP インタープリターindex.phpはそれに登録されている autoload 関数について何も知らないため、ファイルの解析に失敗しますBaseController

必要なのはブートストラップと呼ばれるものです。アプリケーションの実行に不可欠なすべてのコード (ライブラリを含むオートローダーの登録、構成ファイルのロードなど) を 1 つのファイルにまとめます。このファイルは、直接アクセスされるすべてのファイルに含まれます。

于 2013-06-11T21:34:54.697 に答える
0

次のように変更します。

$.ajax({
        type: 'POST',
        url: 'http://localhost/user/your_parameters',
于 2013-11-08T23:50:35.007 に答える