-2

Javascript関数内に移動するまで動作していたPHPスクリプトがあります。これを行うことはできませんか?

//Javascript
function displayPlace() 
{

//PHP
    <?php
    $place = mysql_query("select * from tblRestaurants order by RestName ASC");

    while ($nt= mysql_fetch_assoc($place))
    $arrData[] = $nt;
    if(isset($_GET["ajax"]))
     {
    echo json_encode($arrData);
    die();
     }
    ?>  

//Javascript
    $.getJSON("index.php?ajax=true", function(data) {
        $.each(data, function(index, objRecord) {
            var option=document.createElement("option");
            option.value=objRecord.RestID;
            option.text=objRecord.RestName;
            $("#Doggie").append('<option value="' + objRecord.RestID + '">' + objRecord.RestName     + '</option>');
4

2 に答える 2

1

そのPHPのスニペットは、配置したJavascript関数に関連している可能性がありますが、コードの奥深くに配置しているため、適切な応答が返されません。

あなたの目的は、を呼び出すと$.getJSON()、PHPがJSONでエンコードされた文字列を返すことです...しかし、そのPHPコードをページ内に配置しているため、無関係なテキスト文字(function displayPlace(){およびその前のすべてを含む)がJSONの前にインラインで返されます。そしてそれは混乱しています$.getJSON()

この問題を回避するために、そのPHPスニペットをコードの先頭に配置します。または、json.phpJSONリクエストを処理するための別のページを作成することをお勧めします。


明確にするために編集:
PHPをそこに置かないでください。そこには属していません。

PHPコードをJavascript関数内に配置しても、Javascript関数が呼び出されたときにそのコードは実行されません。PHPは、ページが要求されるとサーバー上で動作し、ページが提供されると停止します*。
JSON関数を呼び出すと、ページを再度リクエストすることになります。そのため、PHPはページ全体を実行し、そのスニペットに到達するまでページ全体を返します。有効なJSON文字列を返す代わりに、HTMLとJavascriptの束があり、次にJSON文字列があります。この応答は使用できません。
以前(動作していたとき)にPHPスニペットがあった場所はどこでも適切です。より簡単に保守できる方法は、JSONを返すことに関連するすべてのPHPコードをと呼ばれるファイルに移動しjson.php、それを要求することです。$.getJSON()の代わりにからのファイルindex.php

于 2013-01-11T18:14:31.053 に答える
0

die()スクリプト全体からどれが終了するかを打っていると思います。php が「このページは完了しました。他に何も出力しないでください」と言うため、その後の JavaScript はブラウザに送信されません。残りのスクリプトは停止します。それを削除すると、役立つはずです。

于 2013-01-11T18:05:58.990 に答える