jQuery appendTo(),json无法在IE 6,7,8中运行

我一直绞尽脑汁两天试图找到解决方案。 我正在使用jQuery.ajax()从数据库中获取值,以便在更改另一个框时更新框。 php脚本从数据库中获取值,然后吐出json。 IT在FF中运行良好,但在IE的所有版本中,选择框都不会更新。 我已经确认输出的json是好的。

这是jquery:

function getVendors(dest,selectSup) { var vend = $('select#sup').val(); $.ajax({ beforeSend: function(){ $("select#dest").parent().addClass('loading'); }, type: "GET", dataType: "json", cache: false, url: '/search/cruiseselect/?type=vendors&supplier=' + vend + '&dest=' + dest, timeout: 2000, error: function() { alert("Failed to submit"); }, success: function(data) { $("select#sup option").remove(); var any = "-- All Cruise Lines --"; $(any).appendTo("select#sup"); $.each(data, function(i, j){ if(j != null && j != undefined) { var sel = j.value == selectSup ? " selected" : ""; var row = "" + j.text + ""; //$(row).appendTo("select#sup"); $("select#sup").append(row); } }); }, complete: function(){ $("select#dest").parent().removeClass('loading'); } }); } jQuery(document).ready(function(){ //dynamic select boxes $("select#dest").change(function(){ var selectSup = $("select#sup").children("option:selected").val(); getVendors($(this).val(),selectSup); }); }); 

我在我的PHP中有这个

 header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Content-type: application/json'); echo json_encode($json); 

它输出正确的json,没有额外的逗号或任何东西。 更重要的是,如果我使用alert(j.value + j.text); 在我的.each()循环中,我在IE中获得了正确的数据,所以它似乎是jquery appendTo()不起作用。

有人有任何想法吗?

我有点惊讶jQuery没有处理这个(我认为它确实…也许它的.html()工作)。

该问题基于IE(6,7,&8)错误,您无法设置选择列表的.innerHTML 。

使用“vanilla”Javascript,您可以使用Option对象创建新选项并将其添加到选择中,或者您可以一次设置整个选择列表(例如,包括选择标记)。

 var mySelect = $("select#sup").get(0);//get actual DOM element var newOpt,selLen; for(var i=0;i<10;i++){ newOpt = new Option('Label: ' + i, i); //format new Option(text, value, defaultSelected, selected); //add new option to select object selLen = mySelect.options.length; mySelect.options[selLen] = newOpt; //This may also work, but I don't recall if IE6 supports the .push() //method on the options collection, if so, this line will replace the 2 above // mySelect.options.push(newOpt); }