小妹不是很会这些 请大家帮我看看这段代码
我是想实现一个点按钮 动态生成一个下拉框和一个textbox的效果 下拉框的数据是从数据库中取出来的
我从网上找了段动态生成下拉框的代码 并自己进行了修改 所以有点乱
我通过ajax已成功取到json数据 并赋值成功 效果已实现  但是我每点一下 它就要取一次数据 实在是太浪费 
所以我想它第一次取到值 就赋值给一个全局变量 然后每点一次时 就判断一下这个全局变量是不是不为空 为空的话 就不用通过ajax来取json了全局变量是 jsondata判断逻辑是
 if (jsondata == null) {
            $.getJSON("/Manager/GetCom", function (data) {
                jsondata = data;
                $.each(data, function (i, n) {
                    var opt = $("<option></option>").text(n.name).val(n.name);
                })
            })
        }
        else { 
          $.each(jsondata, function (i, n) {
                    var opt = $("<option></option>").text(n.name).val(n.name);
                    })
        }
但是我这样修改后 下拉框就显示不出来了!
试了firebug调试 发现执行顺序很乱 不知是怎么回事 调试时的代码是:
  
  function onclick(event) {
        add();
    }
    function (data) {
        jsondata = data;
        $.each(data, function (i, n) {var opt = $("<option></option>").text(n.name).val(n.name);});
    }
    function (i, n) {
        var opt = $("<option></option>").text(n.name).val(n.name);
    }
    function add() {
        var table = document.getElementById("tbody");
        var tr = document.createElement("tr");
        table.appendChild(tr);
        var td1 = document.createElement("td");
        var td2 = document.createElement("td");
        tr.appendChild(td1);
        tr.appendChild(td2);
        var text = document.createElement("input");
        text.type = "text";
        text.name = "name";
        td2.appendChild(text);
        var dd = $("<select></select>").attr("id", "ddl");
        if (jsondata == null) {
            $.getJSON("/Manager/GetCom", function (data) {jsondata = data;$.each(data, function (i, n) {var opt = $("<option></option>").text(n.name).val(n.name);});});
        } else {
            $.each(jsondata, function (i, n) {var opt = $("<option></option>").text(n.name).val(n.name);});
        }
        dd.append(opt);
        td1.appendChild(dd.get(0));
    }
    function del() {
        var trs = document.getElementsByTagName("tr");
        var tbody = document.getElementById("tbody");
        tbody.removeChild(trs[trs.length - 1]);
    }
    function onclick(event) {
        add();
    }发现根本没有执行if(json==null){}else{}这段 调试的时候 这几行也是显示的灰的 不明白为什么会是灰的...firebug中的错误信息是opt is not defined  (opt是下拉框的选项定义)完整代码:
<script type="text/javascript">
    var jsondata = null;
    function add() {
        var table = document.getElementById("tbody");
        var tr = document.createElement("tr");
        table.appendChild(tr);
        var td1 = document.createElement("td");
        var td2 = document.createElement("td");
        tr.appendChild(td1);
        tr.appendChild(td2);
        var text = document.createElement("input");
        text.type = "text";
        text.name = "name";
        td2.appendChild(text);
        var dd = $("<select></select>").attr("id", "ddl");
        if (jsondata == null) {
            $.getJSON("/Manager/GetCom", function (data) {
                jsondata = data;
                $.each(data, function (i, n) {
                    var opt = $("<option></option>").text(n.name).val(n.name);
                })
            })
        }
        else { 
          $.each(jsondata, function (i, n) {
                    var opt = $("<option></option>").text(n.name).val(n.name);
                    })
        }        dd.append(opt);
        td1.appendChild(dd.get(0));
    }
    function del() {
        var trs = document.getElementsByTagName("tr");
        var tbody = document.getElementById("tbody");
        tbody.removeChild(trs[trs.length - 1]);
    }</script>html   <input type="button" value="添加" onclick="add()" />

解决方案 »

  1.   

    不为空的话 就不用通过ajax来取json了
     又打错了
      

  2.   

    第二次 jsondata 是什么了啊 ?
      

  3.   

    第一次取的json的值if (jsondata == null) {
                $.getJSON("/Manager/GetCom", function (data) {
                    jsondata = data;
                    $.each(data, function (i, n) {
                        var opt = $("<option></option>").text(n.name).val(n.name);
                    })
                })
            }
      

  4.   

    哦 我知道了 。
    dd.append(opt);
    td1.appendChild(dd.get(0));
    这两句啊 。
    把opt 弄出来吧 。