2014-10-17 57 views
0

有一些问题正确地从元素中获取操作数据。 互联网上的任何地方似乎都无法用简单的答案来涵盖这样一个简单的问题。请帮忙。jQuery的问题html()

我已经操纵的元素与返回的Ajax请求:

$("#last_comment_added").html("1457856458")

现在我的页面上的功能:

jQuery(document).ready(function($) { 
 
    var post_slug = $("#post_slug").html(); 
 
    var last_comment_added = $("#last_comment_added").text(); 
 

 
    if (post_slug && last_comment_added) { 
 

 
    setInterval(function() { 
 
     $.ajax({ 
 
     type: "POST", 
 
     url: "ajax_comments.php", 
 
     data: { 
 
      "task": "updates", 
 
      "post_slug": post_slug, 
 
      "last_comment_added": last_comment_added 
 
     }, 
 
     cache: false, 
 
     success: function(html) { 
 
      eval(html) 
 
     } 
 
     }); 
 
    }, 10000); 
 
    } 
 
});

我从元件得到的是旧数据,而不是新的阿贾克斯“1457856458”数据。

请帮忙。

+1

控制台中的任何错误?那为什么'eval(html)'挂在那里?记录到控制台,看看你是否得到正确的结果。 – 2014-10-17 15:06:32

+0

没有错误。我的代码工作正常。问题是它返回OLD数据(最初加载页面时)而不是新数据(在ajax请求之后)。我怀疑这是没有更新的DOM。我想知道是否有更新DOM的方法。 – 2014-10-17 15:08:15

+0

Ofcourse,只需要把你想要更新的整个html放在一个div中,然后使用'.html()'函数将'div'的内容更改为'success'函数中的新内容。 – 2014-10-17 15:12:26

回答

1

如果我明白你的问题正确,那只是你创建了一个名为last_comment_added的变量,并期望它不断更新,你将它设置为last_comment_added的文本一次,它在你的区间函数中永远不会更新。这是一个应该让它对你更好的改变。

jQuery(document).ready(function($) { 
 
    var post_slug = $("#post_slug").html(); 
 
    
 
    if (post_slug && last_comment_added) { 
 

 
    setInterval(function() { 
 
     $.ajax({ 
 
     type: "POST", 
 
     url: "ajax_comments.php", 
 
     data: { 
 
      "task": "updates", 
 
      "post_slug": post_slug, 
 
      "last_comment_added": $("#last_comment_added").text() 
 
     }, 
 
     cache: false, 
 
     success: function(html) { 
 
      eval(html) 
 
     } 
 
     }); 
 
    }, 10000); 
 
    } 
 
});

+0

'last_comment_added'的初始化去了哪里? – 2014-10-17 15:11:10

+0

我把它拿出来了,相反每次你打电话给ajax的时候,你都会拿着id为last_comment_added的元素的文本。 – Shriike 2014-10-17 15:11:45

+1

这里是你的代码'var last_comment_added = $(“#last_comment_added”)。text();'last_comment_added被初始化为last_comment_added作为ID的元素的值,它在你的原始代码中设置了一次,它似乎是你问为什么它没有更新到新的值后,你有一个Ajax查询。我提供了一个答案,用于查询运行查询时传递给ajax查询的值。尝试一下,如果它没有做你想要更多的细节更新你的问题。 – Shriike 2014-10-17 15:15:55

1

不要使用eval。

尝试

$(document).ready(function() { 

    var post_slug = $("#post_slug").html(); 
    var last_comment_added = $("#last_comment_added").html(); 

    if (post_slug && last_comment_added) { 

     setInterval(_update, 10000); 

    } 

}); 

function _update() { 

    $.ajax({ 

     type: "POST", 
     url: "ajax_comments.php", 
     data: { 
      "task": "updates", 
      "post_slug": post_slug, 
      "last_comment_added": last_comment_added 
     }, 
     cache: false, 
     success: function(data) { 

      $("#last_comment_added").html(data)  

     } 

    }); 

} 

,你从PHP只有返回数据。 (类似于:echo '1457856458';