我目前正在尝试返回数据库调用以填充下拉框。但是,当我循环浏览返回的列表时,出现“未定义回调”错误。我已经用两种方法尝试过此代码,但都没有用。
我试过了:
$('#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我必须从中拉出两部分的数据库对象的列表。
record
如何解决此“回调”错误,以便可以在函数中使用数据?
回调是在其前任完成操作并返回值后立即执行的函数。在这种情况下,您有两个回调,成功和失败。
禁止在块(if / else / for闭包)中声明函数,这意味着您的回调函数(在ajax闭包中声明)function (record) { }不能放置在其所在的位置,因为它位于if (kovID != null && kovID != '') { }闭包中。
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