jQuery AJAX调用不接受响应数据

时间:2013-01-07 21:57:27

标签: jquery ajax

基于此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似乎没有解决它。请帮忙。

3 个答案:

答案 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));
});