使用jquery插入html不会';行不通

使用jquery插入html不会';行不通,jquery,ajax,insert,innerhtml,Jquery,Ajax,Insert,Innerhtml,我正在建造一个简单的shoutbox 以下是html: <div id="shoutbox"> <form method="post" id="form" class="shoutbox-form"> <table> <tr> <td><label>User</label></td>

我正在建造一个简单的shoutbox

以下是html:

<div id="shoutbox">    
    <form method="post" id="form" class="shoutbox-form">
        <table>
            <tr>
                <td><label>User</label></td>
                <td><input class="text user" id="nick" type="text" MAXLENGTH="25" /></td>
            </tr>
            <tr>
                <td><label>Message</label></td>
                <td><input class="text" id="shout" type="text" MAXLENGTH="255" /></td>
            </tr>
            <tr>
                <td></td>
                <td><input id="send-shout" type="submit" value="Dodaj!" /></td>
            </tr>
        </table>
    </form>
    <div id="shoutbox-container">
        <span class="clear"></span>
        <div class=".shoutbox">
            <div id="shoutbox-loading"><img src="css/images/loading.gif" alt="Loading..." /></div>
            <ul>
            </ul>
        </div>
    </div>
</div
但是显然messageList.html(数据[“响应”])不起作用,尽管firebug显示我的响应是:

{“响应”:“
  • 用户1测试2010-10-07 19:36:13
  • 用户2测试22010-10-07 20:23:56
  • 如果在ajax中我没有
    success
    ,而是
    complete
    我得到
    var data=JSON.parse(数据)错误。有什么想法可以改变来解决这个问题吗

    更新:

    添加:

        var c = data["response"];
        console.log(c);
    
    给我:
  • 用户1测试2010-10-07 19:36:13
  • 用户2测试22010-10-07 20:23:56
  • 
    在firebug控制台中

    我得到var data=JSON.parse(数据);错误


    您引用的响应不是JSON,是吗?它是HTML。直接插入就可以了。

    您的调用应该将json设置为
    数据类型:

    $.ajax({
        type: "POST", 
        url: "/shouts/", 
        data: "action=refresh",
        dataType: 'json',
        success: function(data){
            loading.fadeOut();
            messageList.html(data["response"]);
            messageList.fadeIn(2000);
        }
    });
    
    这将使jQuery自动解析JSON,并将数据作为返回的对象提供给您


    这可能会解决你的问题。至少它会为您处理JSON解释并防止跨浏览器问题。

    我喜欢跟踪最新的插件

    为什么不将响应仅作为JSON,然后用新的

    有关使用此插件的详细信息,请参阅


    没有人注意到html中的错误

    <div class=".shoutbox">
    
    
    
    应该是:

    <div class="shoutbox">
    
    
    
    解决这个问题,看看jQuery的东西是否有效

    按照其他答案中提到的编辑,您还应该将响应类型设置为JSON。这样可以避免对数据使用
    JSON.parse()
    。但是,考虑到您在响应数据上使用了
    JSON.parse()
    ,这是不必要的。

    正确答案:

    $(document).ready(function(){
        var inputUser = $("#nick");
        var inputMessage = $("#shout");
        var loading = $("#shoutbox-loading");
        var messageList = $(".shoutbox > ul");
    
        function updateShoutbox(){
            messageList.hide();
            loading.fadeIn();
            $.ajax({
                type: "POST", 
                url: "/shouts/", 
                data: "action=refresh",
                dataType: "json",
                success: function(data){
                    loading.fadeOut();
                    var c = data["response"];
                    console.log(c);
                    messageList.html(c);
                    messageList.fadeIn(2000);
                }
            });
        }
    

    Poster正在用JSON.parse()解析响应(技术上是JSON),这使数据成为一个对象。无法直接附加/插入具有所需效果的对象。@sholsinger aww,你是对的,我完全忽略了
    {“response”:
    部分,因为某种原因。+1对于你的答案,似乎是在检查所有答案后获得的方法。这确实似乎是个问题。但我如何解决这个问题?转换数据[“response”]字符串不起作用:/@mastodon不,应该没问题,我错了。即使您可以将类型更改为JSON以保存解析,响应也没问题。如果@sholsinger的方法不起作用,那么您需要检查
    var messageList=$(“.shoutbox>ul”)
    根本不存在!好的,修复了这个问题。sholsinger如果你添加这个评论作为答案,我会给你一个分数。在将“完成”更改为“成功”并创建一个变量来存储响应数据后,一切都很好。建议使用更多jQuery内容(例如插件)是不负责任的。您是否修复了HTML,使其没有
    .shoutbox
    类?…除非在IE 6和IE 7中没有可用的JSON对象(并且在类名上有很好的位置)
    $(document).ready(function(){
        var inputUser = $("#nick");
        var inputMessage = $("#shout");
        var loading = $("#shoutbox-loading");
        var messageList = $(".shoutbox > ul");
    
        function updateShoutbox(){
            messageList.hide();
            loading.fadeIn();
            $.ajax({
                type: "POST", 
                url: "/shouts/", 
                data: "action=refresh",
                dataType: "json",
                success: function(data){
                    loading.fadeOut();
                    var c = data["response"];
                    console.log(c);
                    messageList.html(c);
                    messageList.fadeIn(2000);
                }
            });
        }