基于此SO answer,我这样做:
$(document).ready(function () {
$('#stateid').change(function () {
$.ajax({
url: "/admin/state_teamlist.php",
data: {
stateid: $("#stateid").val()
},
dataType: "json",
success: function (json) {
$('#teamid').empty().each(json, function (value, key) {
$('#teamid').append($("<option></option>")
.attr("value", value).text(key));
});
}
});
});
});
返回的数据是有效的JSON(来自PHP的json_encode):
{"16734":"Anchorage Christian","12241":"Barrow","1060":"Bartlett","1064":"Chugiak","5802":"Colony","1061":"Dimond","1058":"Eagle River","1063":"East","3943":"Eielson","7104":"Homer","11597":"Houston","5568":"Juneau-Douglas","10229":"Kenai Central","14260":"Ketchikan","9444":"Kodiak","8443":"Lathrop","12152":"Monroe Catholic","7554":"Nikiski","4082":"North Pole","1065":"Palmer","1057":"Service","14370":"Seward","12271":"Sitka","11780":"Skyview","3308":"Soldotna","844":"South","9919":"Thunder Mountain","13803":"Valdez","9766":"Wasilla","1059":"West","1062":"West Valley"}
但是我收到了这个错误:
未捕获的TypeError:对象#没有方法'apply'
jquery.JS中的错误行是:
if ( callback.apply( obj[ i++ ], args ) === false ) {
这方面的全部内容是:
// args is for internal usage only
each: function( obj, callback, args ) {
var name,
i = 0,
length = obj.length,
isObj = length === undefined || jQuery.isFunction( obj );
if ( args ) {
if ( isObj ) {
for ( name in obj ) {
if ( callback.apply( obj[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( obj[ i++ ], args ) === false ) {
Uncaught TypeError: Object #<Object> has no method 'apply'
break;
}
}
}
// A special, fast, case for the most common use of each
}
teamid选择列表清空正确,但不会使用JSON数据重新填充。如果需要,我可以发布HTML,但我认为这不是问题。
我已经完成了关于该主题的每个SO答案,但没有一个解决方案适合我的问题。为什么我会收到此错误?
我已经尝试了jquery.min.js,不同版本的jquery,将$('teamid')
变为$el
,如引用SO回答,并使用.post和.get而不是.ajax似乎没有解决它。请帮忙。
答案 0 :(得分:2)
您的each
成功回拨不正确。
Chnage:
$('#teamid').empty().each(json, function (value, key) {..
TO:
$('#teamid').empty();
$.each(json, function (value, key) {...
答案 1 :(得分:1)
为什么要链接empty()
和$.each
?在这个特定的例子中链接它们是没有意义的。
$('#teamid').empty().each(json, function (value, key) {
$('#teamid').append($("<option></option>").attr("value", value).text(key));
});
一次做一个。
$('#teamid').empty();
$.each(json, function (value, key) {
$('#teamid').append($("<option></option>").attr("value", value).text(key));
});
答案 2 :(得分:1)
你使用.each是完全错误的。
$('#teamid').empty().each(json, function (value, key) {
...
});
在这种情况下,jQuery尝试使用函数的.apply方法为每个#teamid
元素执行json 函数(根本不是函数)。您的json对象没有apply方法(并且它不应该因为json字符串不能包含函数)因此错误。
请改为尝试:
$("#teamid").empty();
$.each(json, function (value, key) {
$('#teamid').append($("<option></option>").val(value).text(key));
});