选项列表显示ajax输出上的未定义值

时间:2015-12-11 07:33:54

标签: php jquery ajax

这是我在列表框中显示值的代码。

$.ajax({
    type: "POST",
    data: queryvalue,
    url: "inputaction.php",

    success: function (data) {
        switch (action) {
            case "GetMake":
                console.log(data);
                var select = $("#promake");
                select.empty();
                for (var i = 0; i < data.length; i++)
                {
                    select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
                }
                break;
        }
    }
});

我在select字段中得到了很多未定义值的结果。并且我已将控制台结果附加到图像文件中,在控制台输出中是否正确如何纠正此问题。

Console Output

Page Output

$type = mysqli_real_escape_string($conn, $_POST['type']);
            $make = mysqli_real_escape_string($conn, $_POST['make']);
            $query = "select * from assetmodel where typeid = '".$type."' AND makeid = '".$make."' ORDER by model ASC";
            $result = RunQuery($query, $conn);
            while($row = mysqli_fetch_array($result)){
                $re = array(
                    'id' => $row['id'],
                    'model' => $row['model']
                );
            }
            echo json_encode($re);

这是我的行动页

4 个答案:

答案 0 :(得分:2)

你必须使用“JSON.parse”:

var select = $("#promake");
select.empty();
var parse = JSON.parse(json);
for (var i = 0; i < parse.length; i++)
{
      select.append('<option value="' + parse[i].id + '">' + parse[i].make + '</option>');
}

答案 1 :(得分:1)

成功解码json

success: function (data) {
    var data = $.parseJSON(data);
    switch (action) {
        case "GetMake":
            console.log(data);
            var select = $("#promake");
            select.empty();
            for (var i = 0; i < data.length; i++)
            {
                select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
            }
            break;
    }
}

答案 2 :(得分:0)

您必须将dataType指定为json

$.ajax({
    type: "POST",
    data: queryvalue,
    url: "inputaction.php",
    dataType: "json",
    success: function (data) {
        switch (action) {

并在发送数据之前将响应的MIME类型设置为application/json

header('Content-Type: application/json');
echo json_encode($re);

答案 3 :(得分:0)

客户端的简单修复如下。只需在循环中进行条件检查。

for (var i = 0; i < data.length; i++)
{
    if (typeof data[i].id != "undefined" && typeof data[i].make != "undefined" ) {
        select.append('<option value="' + data[i].id + '">' + data[i].make + '</option>');
    }
}

如果您想从数据库本身获得干净的数据,则必须修复查询。这将消除根本原因。