0

次のJavaScriptを含むphpページがあります。

<script>

$(document).ready(function(){
    $('#search').hide();
  });

$('#L1Locations').live('change',function(){

      var htmlstring;
      $selectedvalue = $('#L1Locations').val();

      $.ajax({
                url:"<?php echo site_url('switches/getbuildings/');?>" + "/" + $selectedvalue,
                type:'GET',
                dataType:'json',
                success: function(returnDataFromController) {
                    alert('success');
                        var htmlstring;
                        htmlstring="<select name='L2Locations' id='L2Locations'>";
                        htmlstring = htmlstring + "<option value='all'>All</option>";

                        console.log(returnDataFromController);


                         var JSONdata=[returnDataFromController];
                        alert('string length is' + JSONdata.length);
                        if(JSONdata.length > 0) 
                        {
                            for(var i=0;i<JSONdata.length;i++){
                            var obj = JSONdata[i];
                              for(var key in obj){
                                     var locationkey = key;
                                     var locationname = obj[key];
                                     htmlstring = htmlstring + "<option value='" + locationkey + "'>" + locationname + "</option>";
                                }
                             }

                            $('#l2locations').html(htmlstring);

                        }
                        else
                        {
                            alert('i think undefined');
                            $('#l2locations').html('');
                        }                           
               }

    });
 $('#search').show();
 });
</script>

私が達成しようとしているのは、変数「returnDataFromController」に項目がある場合にコンボボックスを動的に表示することです。

しかし、JSONdata.lengthをチェックする行にバグがあると思います。
ajax呼び出しが入力された配列を返すか空の配列を返すかに関係なく、長さは常に1を示します。長さを要求するときに何がカウントされるかについて混乱していると思います。または、dataTypeプロパティが正しくない可能性がありますか?わからない。

役立つ場合は、「console.log(returnDataFromController)」行を使用すると、ajax呼び出しからデータを取得したときに(したがって、コンボを作成する必要があるときに)次の結果が得られます。

[16:28:09.904] ({'2.5':"Admin1", '2.10':"Admin2"}) @ http://myserver/myapp/index.php/mycontroller/getbranches:98

このシナリオでは、コンボボックスが正しい内容で表示されます。

しかし、空の配列を返すシナリオでは、コンボボックスも作成されます。console.log呼び出しがダンプするものは次のとおりです。

[16:26:23.422] [] @ http://myserver/myapp/index.php/mycontroller/getbranches:98

どこが悪いのか教えてもらえますか?

編集:

戻りデータをオブジェクトとして扱っていることに気付きました。配列を取得しているので、それが必要だと思います。javascriptで配列の長さを正しくチェックする方法を知る必要があると思います。ちょうど長さだと思いました。

ありがとう。

編集2: たぶん私は私のコントローラーが送信する結果を変更する必要がありますか?空の配列を返す代わりに、falseまたはNULLを返す必要がありますか?

        if (isset($buildingforbranch))
        {
                echo json_encode($buildingforbranch);  
        }
        else 
        {
            echo json_encode(false);
        }

編集3:

JavaScriptのJSONの解析で見つかった投稿に基づいていますか?、ajax呼び出しの「成功」セクションのコードを次のように変更しました。

                success: function(returnDataFromController) {

                        var htmlstring;
                        htmlstring="<select name='L2Locations' id='L2Locations'>";
                        htmlstring = htmlstring + "<option value='all'>All</option>";

                        console.log(returnDataFromController);


                         var JSONdata=returnDataFromController,
                            obj = JSON && JSON.parse(JSONdata) || $.parseJSON(JSONdata);
                            alert(obj);
 }

しかし、エラーメッセージが表示されます

[18:34:52.826] SyntaxError: JSON.parse: unexpected character @ http://myserver/myapp/index.php/controller/getbranches:102

行102は次のとおりです。

obj = JSON && JSON.parse(JSONdata) || $.parseJSON(JSONdata);
4

1 に答える 1

0

問題は、コントローラーからのデータが不正な形式の JSON であるということでした。

戻りデータを表示する投稿の部分に注意してください。

  ({'2.5':"Admin1", '2.10':"Admin2"})

2.5 は、一重引用符ではなく二重引用符で囲む必要があります。これがどのように/なぜ起こっているのかわかりませんが、その質問に対処するために別の投稿を作成します. みんな、ありがとう。

于 2012-09-19T18:36:07.487 に答える