为什么.html()方法不会在元素中加载数据?

时间:2011-12-31 12:25:08

标签: javascript jquery ajax

$.get("progress.txt", null, function(data_aj){
        if(data_aj.substr(0,14) == "<!-- MSG:: -->"){
            $("#list").html("<li>"+data_aj+"</li>");
            window.clearTimeout(timeOutId);
        }else{
            $("#list").html(data_aj);
        }
    });

我真的尝试了一切,但无法弄清楚什么是错的。如果我使用alert(data_aj);它会提供所需的输出并且工作正常但是HTML(data_aj)只是不使用.html()加载到<ul>元素#list中。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:1)

您是否已尝试将代码放入文档中,因为您的警报会正常启动但如果您的dom未加载则无法附加到该文件中。对于不是html的列表也使用.append()

$(document).ready(function() {

$.get("progress.txt", null, function(data_aj){
        if(data_aj.substr(0,14) == "<!-- MSG:: -->"){
            $("#list").append("<li>"+data_aj+"</li>");
            window.clearTimeout(timeOutId);
        }else{
            $("#list").append(data_aj);
        }
    });
});

答案 1 :(得分:1)

倾听......

$.get()$.ajax()的缩写。

所以当你这样做时

$.get(uri, function(data){
    //Your functionality
});

你真的这么做了

$.ajax({
    url: uri,
    type: "GET",
    success: function(data) {
        //Your functionality
    }
});

默认情况下,它将页面返回为HTML。或者更确切地说,默认情况下,它首先检查页面上的MIME类型,如果没有找到,则返回HTML。当您请求.txt文件时,它会将其解释为简单的文本文件。如果您想告诉它想要返回的内容(HTML),您可以在服务器页面上的MIME类型中执行此操作,也可以使用$.getJSON()

解决这个问题的一个简单方法是这样做:

$.get(uri, function(data) {
    //Your functionality
},
"html");

与做的相同:

$.ajax({
    url: uri,
    type: "GET",
    dataType: "HTML",
    success: function(data) {
        //Your functionality
    }
});

使用html()也不是一个好主意,因为每次要添加其他新节点时,都要替换ul元素中的现有html。

尝试使用:

$('#list').append('<li>' + data_aj + '</li>');

基本上,您只需将<li>附加到<ul>本身。

最后通过将所有JQuery代码放入

来确保已加载dom
$(document).ready(function() {
   //Your code...
});

否则,如果您的HTML尚未完全加载,您的列表可能还不存在,因此JQuery无法将某些值放入未显示的HTML中。