0

我想用来自实际 MySQL 数据库表的值填充我的网页上的jQWidgets 列表框控件(当页面完成加载和呈现时)。

部分解决方案: 这里

新问题: 我已经更新了源代码,如果我硬编码 SQL 字符串 - 列表框会被填充。但我想制作一个小的 JS 函数 - popList(field, table) - 当您想要在页面上生成一个带有 MySQL 数据库值的 jQWidgets 列表框时,可以调用它。

问题是 - 由于某种原因,在执行 PHP 脚本时$fieldand$table是空的,并且我收到You 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>

弹出列表(字段

    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 响应解析为数组/对象/任何适合您的内容。这是你的 popList 函数在 jQuery 中的样子(注意:你不需要上面的 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 回答