jquery追加不在IE / Firefox中工作

时间:2011-05-25 10:32:42

标签: javascript jquery

我有以下HTML和后续jQuery,它在检索到JSON请求后附加相关的HTML元素。

此实施适用于Google Chrome + Android浏览器+ Safari,但不会填充Firefox或Internet Explorer 9中的数据。

* * 适用于Chrome,Android浏览器,Firefox 4 ...在Firefox 3.x和IE中无效。

静态HTML:

   <header class=line>
                       <div class="unit size3of4">
                            <h2 class="fullname"></h2>
                            <h4 class="nickname"></h4>
                       </div>
   </header>

jQuery代码:

<script>
function load_user_info() {
        var content_url = 'rest.api.url.com';
        $.getJSON(content_url, {id:'11xx1122xx11'}, function(data){
            console.log(data);
            $.each(data, function(key, value) {
                if (key == "fullname") {$('.fullname').append(value);}
                else if (key == "nickname") {$('.nickname').append(value);}
            });
         });
    }

 load_user_info();
 </script>

稍微混淆了浏览器之间的行为。我可以保证JSON请求返回两个变量:fullname&amp;昵称并确认了这个

在使用FireBug插件的Firefox中,我看到了console.log(data)的结果 在Chrome中,我会看到console.log(data)的结果以及全名&amp;的成功显示JSON请求后的HTML中的昵称。

如果有帮助,请使用jQuery 1.6.1 ......

JSON输出:

 {"fullname":"johnny fartburger", "nickname":"jf"}

6 个答案:

答案 0 :(得分:3)

我对你正在做的事情感到有些困惑。我认为以下代码:

$.each(data, function (key, value) {
    if (key == "fullname") {
        $('.fullname').append(value);
    } else if (key == "nickname") {
        $('.nickname').append(value);
    }
});

可以更容易地表示:

$('.fullname').append(data.fullname);
$('.nickname').append(data.nickname);

我不知道这是否能解决你的问题,但肯定会有所改善。

答案 1 :(得分:1)

由此产生的问题来自于IE中未检索到的实际JSON数据。搜索的小时数和小时数问题是jQuery本身不支持XDomainRequest,特别是在$.getJSON请求中

http://bugs.jquery.com/ticket/8283

最后,我编写了一个try {} catch {}语句,检查是否$.browser.msie,如果是,请不要使用$.getJSON来检索结果,而是:

if ($.browser.msie) {
 var xdr = new XDomainRequest();
 xdr.open('GET', url);
 xdr.onload = function() {
     var data = $.parseJSON(this.responseText);
     show_data(data);                
 }
 xdr.send();
} else {
 $.getJSON(url, function(data){
     show_data(data);
 });
}

所以...... 结论在IE(7/8/9)和Firefox(3/4)中附加可以正常工作但在AJAX结果不是时被退回。感谢大家的帮助和见解。

答案 2 :(得分:0)

.append()将HTML字符串作为参数附加到现有内容。您可能希望替换元素的文本,而是使用.text().html(),具体取决于value变量的内容。

答案 3 :(得分:0)

.append(value)不是很安全(例如,如果value =“div”) 您应该使用.html(value)

答案 4 :(得分:0)

data包含什么?我认为.append用于附加元素。如果数据是纯文本,那可能不起作用(实际上没有尝试过)。 Chrome使用不同的引擎,可能会将文本转换为DOM中的textnode。

使用.text().html()设置元素的内容。

答案 5 :(得分:0)

作为appendTo的替代方案,也尝试使用.text()