一尘不染

ajax“未定义回调”错误

ajax

我目前正在尝试返回数据库调用以填充下拉框。但是,当我循环浏览返回的列表时,出现“未定义回调”错误。我已经用两种方法尝试过此代码,但都没有用。

我试过了:

$('#Vehicle_KovId_value').change(function () {
        var kovID = $(this).val();
        var drop2 = $('#Vehicle_BodyStyle_value');
        if (kovID != null && kovID != '') {
            drop2.get(0).options.length = 0;
            drop2.get(0).options[0] = new Option('Please Select One', '-1');
            $.ajax({
                type: "GET",
                url: '/Ajax/Index',
                async: false,
                data: { KovID: kovID },
                contentType: "application/object; charset=utf-8",
                success: function (record) {
                    drop2.get(0).options.length = 0;
                    drop2.get(0).options[0] = new Option("Please Select One", "-1");
                    $.each(function (index, item) {
                    drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
                    });
                },
                error: function () {
                    $('#Vehicle_BodyStyle_value').get(0).options.length = 0;
                    $('#Vehicle_BodyStyle_value').get(0).options[0] = new Option("Error!", "-1");
                    alert("Failed to load styles");
                }
            });
        }
    });

我也尝试过:

$('#Vehicle_KovId_value').change(function () {
        var kovID = $(this).val();
        var drop2 = $('#Vehicle_BodyStyle_value');
        if (kovID != null && kovID != '') {
            drop2.get(0).options.length = 0;
            drop2.get(0).options[0] = new Option('Please Select One', '-1');
            $.ajax({
                type: "GET",
                url: '/Ajax/Index',
                async: false,
                data: { KovID: kovID },
                contentType: "application/object; charset=utf-8",
                success: function (record) {
                    drop2.get(0).options.length = 0;
                    drop2.get(0).options[0] = new Option("Please Select One", "-1");
                    fillBStyles(record);
                    //                    $.each(function (index, item) {
                    //                        drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
                    //                    });
                },
                error: function () {
                    $('#Vehicle_BodyStyle_value').get(0).options.length = 0;
                    $('#Vehicle_BodyStyle_value').get(0).options[0] = new Option("Error!", "-1");
                    alert("Failed to load styles");
                }
            });
        }
    });

    function fillBStyles(r) {
        var drop2 = $('#Vehicle_BodyStyle_value');
        $.each(function (index, item) {
            drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
        });

    }

两者都给我错误:

TypeError:回调未定义

返回的数据对象是record我必须从中拉出两部分的数据库对象的列表。

如何解决此“回调”错误,以便可以在函数中使用数据?


阅读 214

收藏
2020-07-26

共1个答案

一尘不染

回调是在其前任完成操作并返回值后立即执行的函数。在这种情况下,您有两个回调,成功和失败。

禁止在块(if / else / for闭包)中声明函数,这意味着您的回调函数(在ajax闭包中声明)function (record) { }不能放置在其所在的位置,因为它位于if (kovID != null && kovID != '') { }闭包中。

幸运的是,有一个简单的解决方法:在if语句外声明成功回调函数(将其自身放入全局范围),如下所示:

function ajaxSuccess(record) {
                drop2.get(0).options.length = 0;
                drop2.get(0).options[0] = new Option("Please Select One", "-1");
                $.each(function (index, item) {
                drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
                });
            }
// ...do other javascript stuff

然后调用成功函数,如下所示:

$.ajax({
            type: "GET",
            url: '/Ajax/Index',
            async: false,
            data: { KovID: kovID },
            contentType: "application/object; charset=utf-8",
            success: ajaxSuccess
//...blah blah blah
2020-07-26