我正在使用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>
答案 0 :(得分:1)
就目前而言,这段代码是错误的:getTables()
缺少一个大括号。另外,我假设你有一些实际调用 getTables()
的代码,否则这个代码除了声明一个函数外什么都不做。
调试时,$.getJSON
调用确实会快速执行。 AJAX的全部目的是异步。因此调试器将在不进入回调的情况下跳过$.getJSON
调用,因为稍后会调用回调。如果在回调中放置一个断点,则应该触发它。
整个<DIV>
的样式为display:none
。除非您在某个地方调用$('#tables').show()
或以其他方式做某事使其可见,否则结果将永远不可见,除了在DOM中,或通过像firebug这样的工具。
此外,您无法在<DIV>
标记内添加<SELECT>
标记。使用<OPTGROUP>
元素的tables-select
标记,或替换<SELECT>
元素的全部内容,包括初始“选择”选项。