我目前正在尝试返回数据库调用以填充下拉框。但是,当我循环浏览返回的列表时,我收到“回调未定义”错误。我已经尝试过这种代码两种方式,但两种方式都没有。
我试过了:
$('#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
是一个数据库对象列表,我必须从中提取两个部分。
如何修复此“回调”错误,以便我可以在我的函数中使用我的数据?
答案 0 :(得分:1)
回调是在其前任完成操作并立即返回值之后立即执行的函数。在这种情况下,您有两个回调,成功和失败。
块内部不允许使用函数声明(if / else / for closures)这意味着你的回调函数(你在ajax闭包中声明)function (record) { }
不能放在它所在的位置,因为它在你的{{{ 1}}封闭。
幸运的是,有一个简单的解决方法:在if语句之外声明你的成功回调函数(把它放在全局范围内),如下所示:
if (kovID != null && kovID != '') { }
并像这样调用成功函数:
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
答案 1 :(得分:1)
我认为您没有正确使用$.each
。看看the docs中的示例。如果与jQuery选择器一起使用,您使用它的方式会有效,但您直接使用.each()
上的$
。这意味着你没有提供任何迭代的东西。看看你的代码:
$.each(function (index, item) {
drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
});
这次迭代是什么?对于每个什么这个函数会执行?你可能意味着这个:
$('someSelector').each(function (index, item) {
drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
});
或者这个:
$.each(someArray, function (index, item) {
drop2.get(0).options[drop2.get(0).options.length] = new Option(item.Display, item.Value);
});
无论哪种方式,您都需要为.each()
提供一个要迭代的集合。我错误地认为它违反了后一种情况,但由于你的使用中没有第二个参数,因此callback
没有提供$.each()
。
答案 2 :(得分:0)
移动你的
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);
});
}
在其他功能之上。
然后使用|| vs&& if(kovID!= null&& kovID!='')
为什么你需要&&,kovID不等于任何一个,而且&&意味着它必须满足这两个要求。