jquery .html()不起作用

时间:2012-02-14 14:18:29

标签: javascript jquery rest

我正在使用jquery .html()通过调用REST url来动态附加一些标签,但它不起作用。

<div style="display: none;" id="tables">
    <form:select id="table" name="table" path="table">      
        <form:option value="">Choose</form:option>
        <div id="tables-select">
        <!-- The available tables for update will be added here -->
        </div>
    </form:select>  
    <script type="text/javascript">
        function getTables(type) {
            $.getJSON('/web/tables/db/' + type,
            {
                ajax : 'true'
            },function(data) {
            html ='';
            var len = data.length;
            for ( var i=0; i<len; i++) {
               html += '<option value="'+data[i]+'" >'+data[i]+'</option>';
            }
            $('#tables-select').html(html);
            });
        }
    </script>
</div>

我看到REST调用正在进行,但没有发生任何事情。 调试并放置断点后,我看到java脚本从第10行直接跳转到java脚本函数的末尾(第20行)。

知道这里发生了什么吗? 我的页面中有很多相同类型的函数,所有这些函数都需要这个函数。

编辑:

这就是我调用函数的方式

<script type="text/javascript">
    $(document).ready(function(){
        $("#type").live('change', function(){
            var type = $(this).val();
            getSites(type);
            getTabless(type);
        });
    });
</script>

1 个答案:

答案 0 :(得分:1)

就目前而言,这段代码是错误的:getTables()缺少一个大括号。另外,我假设你有一些实际调用 getTables()的代码,否则这个代码除了声明一个函数外什么都不做。

调试时,$.getJSON调用确实会快速执行。 AJAX的全部目的是异步。因此调试器将在不进入回调的情况下跳过$.getJSON调用,因为稍后会调用回调。如果在回调中放置一个断点,则应该触发它。

整个<DIV>的样式为display:none。除非您在某个地方调用$('#tables').show()或以其他方式做某事使其可见,否则结果将永远不可见,除了在DOM中,或通过像firebug这样的工具。

此外,您无法在<DIV>标记内添加<SELECT>标记。使用<OPTGROUP>元素的tables-select标记,或替换<SELECT>元素的全部内容,包括初始“选择”选项。