1

this 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のさまざまなバージョンを試してみましたが、参考文献SOの回答$('teamid')$elように変更し、.ajaxの代わりに.postと.getを使用しましたが、何も解決していないようです。助けてください。

4

3 に答える 3

2

each成功したコールバックが正しくありません。

変化 :

$('#teamid').empty().each(json, function (value, key) {..

に:

$('#teamid').empty();
$.each(json, function (value, key) {...
于 2013-01-07T22:02:19.760 に答える
1

なぜあなたは連鎖empty()しているの$.each ですか?この特定の例でそれらを連鎖させることは意味がありません。

$('#teamid').empty().each(json, function (value, key) {
     $('#teamid').append($("<option></option>").attr("value", value).text(key));
 });

一度に1つずつ実行します。

  $('#teamid').empty(); 
  $.each(json, function (value, key) {
      $('#teamid').append($("<option></option>").attr("value", value).text(key));
  });
于 2013-01-07T22:01:41.377 に答える
1

.each の使用は単に間違っています。

$('#teamid').empty().each(json, function (value, key) {
    ...
});

この場合、jQuery は、関数の .apply メソッドを使用して、要素ごとにjson関数(まったく関数ではない) を実行しようとします。#teamidあなたのjsonオブジェクトにはapplyメソッドがありません(json文字列には関数を含めることができないため、そうすべきではありません)。したがって、エラーが発生します。

代わりにこれを試してください:

$("#teamid").empty();
$.each(json, function (value, key) {
    $('#teamid').append($("<option></option>").val(value).text(key));
});
于 2013-01-07T22:02:10.733 に答える