1

我有一个带有“选择”框的表格。选中该框后,我希望数据库中的相应记录显示在同一页面上。

涉及两个文件:一个包含表单的 HTML 页面:

<form id="theForm">
<select id="theDropdown">
<option value="biology">Biology</option>
<option value="chemistry">Chemistry</option>
<option value="english">English</option>
</select>
</form>
<div id="resultsGoHere"></div>

并且还包含 jQuery 代码:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {

    $('#theDropdown').on('change', function() {
       var qString = '{sub: ' + $('#theDropdown option:selected').text() + '}';
       $.post('sub_db_handler.php', qString, processResponse);
       // $('#resultsGoHere').html(qString);
    });

    function processResponse(data) {
        $('#resultsGoHere').html(data);
    }

});
</script>

jQuery 代码似乎成功地获取了选择菜单的选定值并格式化了一个 JSON 查询字符串,如果上面的注释行未注释,则会打印出该字符串。

这是post上面命令中引用的 PHP 脚本。

<?php

$con = mysql_connect("localhost","rongilmo_ron","******");
if(!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("rongilmo_databases", $con);
$sub = $_POST['theDropdown'];

$q = "SELECT dbs.db_name, dbs.db_url FROM dbs, subjects, subjects_databases
WHERE subjects.subject_id=subjects_databases.subject_id
AND subjects_databases.database_id=dbs.db_id
AND subjects.subject_name='$sub'";

$r = mysql_query($q);
$array = mysql_fetch_row($r);
echo json_encode($array);

?>

我根本没有得到任何结果。我已经在非 ajax 模式下测试了查询,所以这不是问题。

对 ajax 还是很陌生。尽管阅读了很多教程并进行了很多谷歌搜索,但我已经为此工作了两天,但似乎无法使其工作。

您能提供的任何帮助将不胜感激。

4

2 回答 2

1

Give your select a name attribute.

<form id="theForm">
    <select id="theDropdown" name="theDropdown">
        <option value="biology">Biology</option>
        <option value="chemistry">Chemistry</option>
        <option value="english">English</option>
    </select>
</form>
<div id="resultsGoHere"></div>

Update. PHP is expecting a query string in the standard URL-encoded notation not JSON. By sending it the following way the $_POST array should contain 'sub' with the value of the selected option.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {

    $('#theDropdown').change(function() {   
        var qString = 'sub=' +$(this).val();
        $.post('sub_db_handler.php', qString, processResponse);
    });

    function processResponse(data) {
        $('#resultsGoHere').html(data);
    }

});
</script>

<?php

    $con = mysql_connect("localhost","rongilmo_ron","******");
    if(!$con) { die('Could not connect: ' . mysql_error()); }
    mysql_select_db("rongilmo_databases", $con);
    $sub = $_POST['sub'];

    $q = "SELECT dbs.db_name, dbs.db_url FROM dbs, subjects, subjects_databases
    WHERE subjects.subject_id=subjects_databases.subject_id
    AND subjects_databases.database_id=dbs.db_id
    AND subjects.subject_name='$sub'";

    $r = mysql_query($q);
    $array = mysql_fetch_row($r);
    echo json_encode($array);

?>
于 2012-05-11T19:07:47.843 回答
0

您应该使用 ajax $.getJson() 返回一个 json 字符串。它将要求您在 json 字符串上使用 $each。请参阅网站http://api.jquery.com/jQuery.getJSON/上的 jquery 文档

于 2012-05-11T19:23:51.453 回答