从下拉列表中选择数据时,从MYSQL数据库设置输入字段值属性

时间:2014-02-12 22:47:33

标签: javascript php jquery mysql json

我正在尝试发送选择查询并将结果设置为不同输入字段的值属性,应在从下拉列表中选择值时发送查询。在做了一些研究之后,我发现可以通过jQuery实现这一点。

jQuery会向php文件发送请求,其中包含我的查询和获取结果,然后以json格式返回值。在这一点上一切都很好,我的php文件正在工作并返回有效的json数据但我无法将这些数据附加到我的输入字段中。这是我的脚本应运行php文件并在json中返回结果,然后在文本字段中附加结果。

Check my code on fiddle

<script>
    var flight_destination = $('#destination).text();
    var flight_departure = $('#departure).text();
    var flight_arrival = $('#arrival).text();

    $('#flight_number').on('change', function() {

        var flight_info = $('#flight_number :selected').text();
        $.ajax({
            url: "getFlightData.php",
            type: "get",
            data: '?flight_number=$flight_number',
            success: function(data){ 
                var flight_destination = data[1];
                var flight_departure = data[2];
                var flight_arrival = data[3];   
            }
        }

        $('#destination').val(flight_destination);
        $('#departure').val(flight_departure);
        $('#arrival').val(flight_arrival);

    })
</script>

getFlightData.php

<?php
    include "dbConnect.php";
    $flight_number = $_GET['flight_number'];
    $query = mysql_query("SELECT * FROM flights WHERE flight_number='$flight_number'"); 
    $data = array();
    while($row = mysql_fetch_array($query)) 
    {
        $row_data = array(
            'flight_number' => $row['flight_number'], 
            'destination' => $row['destination'],
            'departure' => $row['departure'],
            'arrival' => $row['arrival']
        );
        array_push($data, $row_data);
    }
    echo json_encode($data);
?>

好消息 我的一个朋友帮我解决了 data:行中的语法错误。我确实将其从data:'flight_number='+$('#flight_number').val(),更改为data:{'flight_number':$('#flight_number').val()},

在浏览器控制台窗口中,json对象完全返回,更改了下拉列表值,但仍然无法将这些对象作为值属性附加到输入字段


更新2

现在我有this完全在浏览器控制台窗口中返回的数据,但第一个文本字段中附加的唯一内容是[object] 从下拉列表中选择选项后,浏览器的This is a screenshot


更新3 在@satyrwilder的帮助和努力下,我现在能够检索第一个文本字段值。这是脚本代码段的工作版本

$(function(){
    var flight_destination = $('#destination');
    var flight_departure = $('#departure');
    var flight_arrival = $('#arrival');
    var flight_number = $('#flight_number');

    $('#flight_number').on('change', function() {
       var flight_info = $('#flight_number :selected').text();
    $.ajax({
        url: "getFlightData.php",
        type: "get",
        dataType: "json",
        data: { 'flight_number' : flight_number.val() }
        })
    .done(function(data) {
        $("#destination").val(data[0].destination);
        $("#departure").text(data[0].departure).val(data[0].departure);
        $("#arrival").text(data[0].arrival).val(data[0].arrival);

    });
    });
});   

我现在也期待附加datetime-local值。我将定期更新此问题,直到100%强制

2 个答案:

答案 0 :(得分:0)

您必须声明接收查询的数据类型。

dataType: "json"

$.ajax({
        url: "getFlightData.php",
        type: "get",
        data: '?flight_number=$flight_number',
        success: function(data){ ... },
        dataType: "json", //<--------- this 
});

Documentation of $.ajax()


在你的代码php

开头的json标题

对于JSON:

header('Content-Type: application/json');

对于JSON-P:

header('Content-Type: application/javascript');

答案 1 :(得分:0)

最后,我来到了最终的工作代码,其中一切都运行良好。首先,我要感谢@satyrwilder更正我的javascript部分。

这是最终代码,它使用jquery + php

将数据库中的值附加到text和datatime-local字段中

<强> getFlightDate.php

<?php
header('Content-Type: application/json');
include "dbConnect.php";
function datetime()
{
    return date( 'Y-m-d\TH:i:s', time());

}

$flight_number = $_GET['flight_number'];
$query = mysql_query("SELECT * FROM flights WHERE flight_number='$flight_number'"); 
$data = array();
while($row = mysql_fetch_array($query)) 
{
$row_data = array(
    'flight_number' => $row['flight_number'], 
    'destination' => $row['destination'],
    'departure' => datetime($row['departure']),
    'arrival' => datetime($row['arrival'])
   );
  array_push($data, $row_data);

}
echo json_encode($data);
?>

<强> print.php

<?php
include "dbConnect.php";
$flight_numbers = mysql_query("SELECT flight_number FROM flights"); 
?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<title>Test</title>
</head>
<body>
<select id="flight_number">
<?php while($row = mysql_fetch_array($flight_numbers)) 
{
Print "<option>".$row['flight_number'] . "</option> ";
} 
?>
</select>
<br>
<input type="text" id="destination">
<input type="datetime-local" id="departure" />
<input type="datetime-local" id="arrival" />
<script>
$(function(){
    var flight_destination = $('#destination');
    var flight_departure = $('#departure');
    var flight_arrival = $('#arrival');
    var flight_number = $('#flight_number');

    $('#flight_number').on('change', function() {
       var flight_info = $('#flight_number :selected').text();
    $.ajax({
        url: "getFlightData.php",
        type: "get",
        dataType: "json",
        data: { 'flight_number' : flight_number.val() }
        })
    .done(function(data) {

        $("#destination").val(data[0].destination);
        $("#departure").text(data[0].departure).val(data[0].departure);
        $("#arrival").text(data[0].arrival).val(data[0].arrival);

    });
    });
});
</script>
</body>
</html>

诀窍是在json_encode之前更改日期时间格式,因为datetime-local输入字段以特定格式显示值2014-12-05T08:30:59 - &gt; Y-m-d\TH:i:s