为什么当单击“编辑”时,它没有在选择列表中显示单击数据的模型,因为我想显示模型?

why when click on edit it is not showing the model of clicked data in a select list as i want to show the model?

提问人:Cookie 提问时间:11/10/2023 更新时间:11/10/2023 访问量:33

问:

这是我的控制器功能

public function getModel($make_id = null)
{
    $make_id = request()->make_id;
    $carsmodel = CarModel::where('make_id', $make_id)->orderBy('model', 'ASC')->get();
    return response()->json(['carsmodel' => $carsmodel]);
}

这是我的JS

getModel: function (url,make_id) {
    m=null;
    $.ajax({
        url: url,
        type: "POST",
        data: { make_id: make_id,},
        success: function (response) {
           $("#model_id").empty();
           $("#model_id").append('<option value="">Choose</option>');
           $.each(response.carsmodel, function (index, carModel) {
               $("#model_id").append(
                   '<option value="' +carModel.id + '">' + carModel.model + "</option>"
               );
           });
        },
    });
    return m;
},

这就是它的实现方式

 $("#make_id").on('change', function() {
        var make_id = $(this).val();
        var url = '{{ route("cars.submodels.getModel")}}';
        App.Cars.getModel(url, make_id);
    });

这是用户单击编辑按钮时加载的功能

App.Cars.SubModels = {
        loadEditData(e) {
            var $url = $(e).attr('href');
            var url = '/admin/cars/submodels/getModel';
            $.get($url, function($response) {
                //console.log($response.model.model)
                $('#createEditForm').trigger('reset')
                $('#createEditModal').modal('show')
                $('#make_id').val($response.resp.make_id)
                //App.Cars.getModel(url, $response.resp.make_id);
                $('#sub_model').val($response.resp.sub_model)
                $('#sub_model_ar').val($response.resp.sub_model_ar)
                $('#year_from').val($response.resp.year_from)
                $('#year_to').val($response.resp.year_to)
                $('#car_source').val($response.resp.car_source)
                $('#method').val("PUT");
                $('#sub_model_image').removeAttr('required');
                $('#url').val($response.route);
                $('#create').html("Update");
                $("form#createEditForm input").removeClass("error");
                $("form#createEditForm input").parent().find("label.error").remove();
                $(".close").on("click", function() {
                    $("#createEditModal").modal('hide');
                });
                $("#close-btn").on("click", function() {
                    $("#createEditModal").modal('hide');
                });
                App.Cars.getModel(url, $response.resp.make_id, function(response) {
                    $('#model_id').empty().append('<option value="">Choose</option>');
                    $.each(response.carsmodel, function(index, carModel) {
                        $("#model_id").append(
                            '<option value="' + carModel.id + '">' + carModel.model + "</option>"
                        );
                    });
                    $('#model_id').val($response.resp.model_id);
                });

            })
        },
    }

因此,当用户单击编辑按钮时,所有数据都已填充,但模型不会自动填充,我在这里也调用了该函数,但它仍然没有填充模型,除了请告诉我该怎么做之外,一切都运行良好。

JavaScript HTML jQuery Ajax Laravel

评论

0赞 Davi Amaral 11/10/2023
应确保在 loadEditData 函数中调用 getModel 函数时返回预期数据。您可以添加一些控制台.log语句进行调试,并查看响应数据是否包含必要的模型信息。$.get($url, function($response) { console.log($response); // 查看响应数据 // ...代码的其余部分 });

答:

0赞 Davi Amaral 11/10/2023 #1

我认为您需要确保在显示编辑模式并设置make_id后调用 App.Cars.getModel 函数。我可以看到在您的代码中,您正在使用回调函数调用 App.Cars.getModel,这可能不是必需的。也许你应该尝试简化它:

诸如此类:

$('#createEditModal').modal('show');
$('#make_id').val($response.resp.make_id);
    
// Call App.Cars.getModel directly
App.Cars.getModel(url, $response.resp.make_id);
    
// ... rest of the code

其他事情,您是否打开了浏览器的开发人员控制台并检查了任何 JavaScript 错误?JavaScript 代码的其他部分中的某些错误可能会干扰填充模型选择列表的代码的执行。

您还可以在控制器 (getModel) 中检查服务器端代码函数。查看它是否根据提供的make_id正确检索和返回模型数据。

评论

1赞 Cookie 11/11/2023
是的,控制台中没有任何内容,并且正在检索数据,正确地向控制器发送 AJAX 请求再次解决了我的问题