2

だから私は興味深い問題を抱えています

jquery .load() 関数に問題があります。私は次のようなファイル構造を持っています

index.php  
|  
|---header.html  
|---body.html  
|---footer.html

index.php は 3 つの変数を次のように設定します。$variable_one = new Database('passedQuery');

次に、header.html、body.html、および footer.html が index.php に含まれます。

body.html には、次のようなものがあります

<div class="span4 well">
        <h3>Current Statistics</h3>
        <hr>
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>Users</th>
                    <th>Event One</th>
                    <th>Event Two</th>
                    <th>Event Three</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><?php echo $var1->result[0][0]; ?></td>
                    <td><?php echo $var2->result[0][0]; ?></td>
                    <td><?php echo $var3->result[0][0]; ?></td>
                </tr>
            </tbody>
        </table>
    </div>

また、汎用の jquery 関数を介して送信される body.html にフォームもあります。

 $(document).ready(function(){
    $('.btn').bind('click', function(e){
        e.preventDefault();
        var form = $(this).parents('form');
        var vals = $(form).serialize();
        var form_id = $(form).attr('id');
        $.ajax({
            url: $(form).attr('action'),
            type: $(form).attr('method'),
            data: vals,
            dataType: 'json',
            success: function(data){
                console.log("Success");
                $('#information').html('<div class="alert alert-success">Great Success! :)</div>');
                setTimeout(function() {
                    $('#content').load('views/partials/body.html');
                }, 5000);
            },
            error: function(a, b, c){
                console.log("Error");
                $('#information').html('<div class="alert alert-error">Epic Failure</div>');
                setTimeout(function() {
                    $('#content').load('views/partials/body.html');
                }, 5000);
            }
        });
    });
 });

フォームを送信して本文をリロードすると、html でエコーされた PHP 変数がなくなり、次のような apache エラーが発生します。

[dateTime] [error] [client IP] PHP Notice:  Undefined variable: variable in /path/to/body.html on line 133, referer: myReferrer

私はこれについて何人かの友人に尋ねましたが、Freenode の #jquery と同様に、全員が困惑していました。誰にもアイデアはありますか?

更新 - フォーム コードと index.php コード フォーム

<div class="span4 well">
        <form class="form-horizontal" id="admin_add" name="admin_add" method="post" action="routes/to/add_admin.php">
            <fieldset>
                <legend>Add Administrator</legend>
                <div class="control-group">
                    <label class="control-label" for="select03">Select a user</label>
                    <div class="controls">
                        <select id="select03" name="user">
                            <?php
                                foreach($var1->result as $key => $value)
                                    echo "<option>".$value[0]."</option>";
                            ?>
                        </select>
                    </div>
                </div>
                <div class="form-actions">
                    <button type="submit" class="btn btn-primary form-submit-button">Submit</button>
                </div>
            </fieldset>
        </form>
    </div>

索引

$var2 = new Database('query', 'SELECT COUNT(uid) FROM attendees WHERE eid = 1');
$var3 = new Database('query', 'SELECT COUNT(uid) FROM attendees WHERE eid = 2');

/**
 * List users to add to database
 */
$var1 = new Database('query', 'SELECT name FROM users WHERE admin=0');

/**
 * Include all the visuals
 */
include('views/partials/header.html');
require_once('views/partials/body.html');
include('views/partials/footer.html');
4

2 に答える 2

3

初めて body.html をロードするときは、php のinclude()関数を使用してロードしていると思います。まあ、これはphpを「連結」するので、サーバー側では1つの長いphpファイルのようになります。コードに中断がないかのように、これは変数で機能します。

jQuery のload()関数を使用すると、これはクライアント側で発生します。何が起こっているかというと、JUST の html 出力を取得していて、body.htmlそのコンテンツをクライアントのページに動的に (クライアント側で) 入れているということです。

あなたが抱えている問題は、PHPが連結されなくなったことです。load()その特異性を取り入れbody.htmlてページに入れます。

別の見方をすれば、誰かがindex.phpphp を解析すると、echo されたすべての変数が bog standard text/html に変換され、ブラウザに送られます。php 変数ではなくなり、単なる text/html になります。JavaScript 経由で新しいリクエストを行うbody.htmlということは、参照している変数が利用できなくなったことを意味します。それらは既に HTML に変換されてブラウザーに送信され、その後 php が停止しました。これは新しい要求です。

正直なところ、これをどのように修正したいのかわかりません。smarty のようなテンプレート システムを検討することをお勧めします。functions.phpまたは、関数をinclude it into yourという名前のファイルに入れ、index ページのコードに依存するのではなく、body.htmlそれらの関数を自分のファイルで参照したい場合があります。body.html

つまり、次のbody.htmlようになります。

<?php include "functions.php"; ?>
<div ...>
<?php 
    $var1 = getVar1(); // function in functions.php
    echo $var1->result[0][0];
    // ... etc
?>
</div>

次に、javascript から呼び出されると、ブラウザーに配信される前に、php が評価され、すべてが機能します。

これでうまく説明できたと思います。:)

于 2012-07-01T00:22:27.907 に答える
0

jQuery リクエストがサーバーに到達すると、PHP 処理を行わない body.html が返されるため、index.php 内に設定された変数は存在しません。

于 2012-07-01T00:21:56.473 に答える