0

私はこの問題を最小限の本質にまで煮詰めることができました.2つの単純な.phpファイルがあります.

テスト.PHP

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>My Page</title>

<script src='/root/js/jquery-1.6.3.js'></script>
<script>

$(document).ready(function() {

$.ajax({

        url : 'test_ajax.php',
        type : 'GET',
        timeout : 10000,
        dataType : 'text',
        data : { 'param' : 'whatever' },
        success : function(data,status,jqXHR) {
            $('#status').html(data.length+"-"+data);
        },
        error : function(jqXHR,textStatus,errorThrown) {
            $('#status').html("Error: "+textStatus+" , "+errorThrown);
        },
        complete : function(jqXHR,textStatus) {
        }

    });

}); // end ready

</script>

</head>

<body>
    <p id='status'>
    </p>
</body>
</html>

および TEST_AJAX.PHP

<?php
?>

<?php
echo "ok";
?>

TEST_AJAX.PHP から返されるはずのデータは「OK」です。ただし、jQuery/ajax コードによって取得されるのは、" ok" として出力される THREE 文字列です (ただし、[0] の文字は " " と等しくありません)。

これは、TEST_AJAX に 2 つの php ブロックがある場合にのみ発生します。最初のブロックを削除して 2 番目のブロックだけを残すと、2 文字の文字列として "ok" が返されます。

ここで何が起こっているのですか?私の知る限り、.php ファイルに複数の php ブロックを含めることは完全に許容されるはずです。ただし、この単純化された例では明らかに不要ですが。

4

3 に答える 3

4

2 つの php ブロックの間に空白行があることに注意してください。も表示されます。に変更します

<?php
?><?php
echo "ok";
?>

そしてそれはうまくいくはずです。

于 2013-02-11T07:15:28.337 に答える
0

PHPブロック内の空白は無視されますが、PHPブロック間のスペースは常に返されます。次のようなjson文字列を印刷する方が幸運かもしれません。

{'response':'ok'}

次に、ajaxリクエストでデータ型をjsonに変更し、data.responseを使用してレスポンスにアクセスします

そうすれば、余分なスペースが解析に影響を与えることはありません

于 2013-02-11T07:20:59.673 に答える
0

PHPはテンプレート言語です。タグの外側にあるものはすべて解析されず、文字通り返されません。

<html>
..
    <body>
        <?php echo "Hello world"; 

// white space within the tags

?>
    </body>
</html>

戻ります

<html>
..
    <body>
        Hello world
    </body>
</html>
于 2013-02-11T07:21:27.613 に答える