jQuery AJAX函数 - 未传递数据

时间:2017-12-19 15:52:01

标签: php jquery json ajax

不确定我在这里做错了什么,但我有以下AJAX功能。 console.log(make_id);工作正常,但data: {make:make_id},似乎无法传递给/get_models.php - 这行代码$make_id = $POST['make'];

$(document).ready(function() {
    $("#select_make").change(function() {
        var make_id = $(this).val();
        console.log(make_id);
        $.ajax({
            url: '/car_clearance_form/get_models.php',
            type: 'post',
            data: {
                make: make_id
            },
            dataType: 'json',
            success: function(response) {
                console.log(response);
                var len = response.length;
                $("#select_model").empty();
                for (var i = 0; i < len; i++) {
                    var model_id = response[i]['model_id'];
                    var model_name = response[i]['model_name'];
                    $("#select_model").append("<option value='" + model_id + "'>" + model_name + "</option>");
                }
            }
        });
    });
});

这是get_models.php的代码

我收到以下错误PHP Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given$sql似乎返回false,因为$make_id没有从AJAX函数传递任何东西

<?php
   include "config.php";
   $make_id = $POST['make'];
   $sql = "SELECT model_name, model_id FROM models WHERE make_id = ".$make_id;
   $result = mysqli_query($con, $sql);
   $models_array = array();
   while ($row = mysqli_fetch_array($result) ) {
     $model_id = $row['model_id'];
     $model_name = $row['model_name'];
     $models_array = array("model_id" => $model_id, "model_name" => $model_name);
   }
   // encoding array to JSON format
   echo json_encode($models_array);
   ?>

2 个答案:

答案 0 :(得分:2)

有几个问题:

1)正如BeingSunny所指出的,$POST['Make']是一个错字,应该是$_POST['make']

2)正如BeingSunny和我指出的那样,当你说你的console.log是 &#34; ...只返回$ models_array&#34; 中的最后一项,实际上并非如此。

真正的问题是$ models_array只有包含数据库结果中的最后一项。 console.log正在准确报告它给出的内容。其根本原因是每次循环运行时$models_array = array("model_id" => $model_id, "model_name" => $model_name);都会覆盖$ models_array变量。

$models_array[] = array("model_id" => $model_id, "model_name" => $model_name);

将解决这个问题,因为它会向数组添加一个新条目,而不是完全删除整个变量。

另请注意我的评论是您对SQL注入攻击的漏洞。虽然这与问题没有直接关系,但它肯定是一个你应该紧急解决的问题。

答案 1 :(得分:-4)

尝试将“make”放在引号内,以便代码变为:

$(document).ready(function() {
        $("#select_make").change(function() {
        var make_id = $(this).val();
        console.log(make_id);
        $.ajax({
            url: '/car_clearance_form/get_models.php',
            type: 'post',
            data: {'make':make_id},//here
            dataType: 'json',
            success:function(response) {
            console.log(response);
                var len = response.length;

                $("#select_model").empty();
                for(var i = 0; i<len; i++) {
                    var model_id = response[i]['model_id'];
                    var model_name = response[i]['model_name'];

                    $("#select_model").append("<option 
            value='"+model_id+"'>"+model_name+"</option>");
                }

            }

            });
            });
            });