0

Web ページのjQWidgets リストボックスコントロールに (ページの読み込みとレンダリングが完了したときに) 実際の MySQL データベース テーブルの値を入力したいと考えています。

部分的な解決策: ここ

新しい問題: ソース コードを更新しましたが、SQL 文字列をハードコーディングすると、リスト ボックスに値が入力されます。しかし、ページ上の MySQL データベースの値を使用して jQWidgets リストボックスを生成するときに呼び出すことができる小さな JS 関数 - popList(field, table) - を作成したいと考えています。

問題は、PHP スクリプトの実行時に何らかの理由で$fieldとが空になり、エラーが発生することです。何を与える?$tableYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM' at line 1

ページ:

            <div id="ListBox">
                <script type="text/javascript">
                popList("name", "categories");
            </script>
            </div>

popList(フィールド,) :

    function popList(field, table) {
    $.ajax({
        type: "GET",
        url: 'getListOfValues.php',
        data: 'field='+escape(field)+'&table='+escape(table),
        dataType: 'json',
        success: function(response) {
            var source = $.parseJSON(response);
            $("#ListBox").jqxListBox({ source: source, checkboxes: true, width: '400px', height: '150px', theme: 'summer'});
        },
        error: function() {
            alert('sources unavailable');
        }
    });
}

getListOfValues.php :

    <?php
    require "dbinfo.php";

    // Opens a connection to a MySQL server
    $connection=mysql_connect($host, $username, $password);
    if (!$connection) {
        die('Not connected : ' . mysql_error());
    }

    // Set the active MySQL database
    $db_selected = mysql_select_db($database, $connection);
    if (!$db_selected) {
        die ('Can\'t use db : ' . mysql_error());
    }

    $field = $_GET["field"];
    $table = $_GET["table"];

    $field = mysql_real_escape_string($field);
    $table = mysql_real_escape_string($table);

    $qryString = "SELECT " . $field . " FROM " . $table;

    $qryResult = mysql_query($qryString) or die(mysql_error());

    $source = array();

    while ($row = mysql_fetch_array($qryResult)){
        array_push($source, $row[$field]);
    }

    mysql_close($connection);

    echo json_encode($source);
?>
4

1 に答える 1

4

わかりました、ここにいくつかのものがあります。まず、ajaxRequest を実行するときにコールバック関数が必要です。(理由は後で説明します。) したがって、 ajaxReqest.send(null); の前に次の行を追加します。

ajaxRequest.onreadystatechange = processAjaxResponse;

次に、呼び出される processAjaxResponse 関数を追加する必要があります。

function processAjaxResponse() {
    if (ajaxRequest.readySTate == 4) {
        var response = ajaxRequest.responseText;
        //do something with the response
        //if you want to decode the JSON returned from PHP use this line
        var arr = eval(response);
    }
}

さて、PHP 側の問題は、return メソッドを使用していることです。代わりに、PHP で出力を表示またはエコーする必要があります。このように考えてみてください。あなたが行う各 ajax 呼び出しは、目に見えないブラウザーのようなものです。PHP スクリプトは、目に見えないブラウザーが取得して操作できるように、画面に何かを出力する必要があります。

この特定のケースでは、配列を PHP から JS に戻そうとしているので、json_encode が役に立ちます。戻り行を次のように変更します。

print json_encode($listOfReturnedValues);

ご不明な点がある場合、またはこれ以上のサポートが必要な場合はお知らせください。余談ですが、jQuery のようなものを使用して ajax 呼び出しを行い、応答を解析することを強くお勧めします。すべてのブラウザーで ajax 呼び出しが準拠していることを確認するだけでなく、JSON 応答を配列/オブジェクトなどに自動的に解析できます。jQuery での popList 関数は次のようになります (注: 上記の processAjaxResponse 関数は必要ありません)。

function popList(field,table) {
    $.ajax({
            type: "GET",
            url: 'getListofValues.php',
            data: 'field='+escape(field)+'&table='+escape(table),
            dataType: "json",
            success: function(response) {
                //the response variable here would have your array automatically decoded
            }
        });
}

それはずっときれいで、維持するのが簡単です。以前のやり方を思い出すために、古いコードに戻らなければなりませんでした;)

幸運を!

于 2012-05-04T19:33:27.160 に答える