2014-10-17 2 views
0

Имея некоторые проблемы, правильно получающие управляемые данные от элемента. Повсюду в Интернете, похоже, нет простого ответа на простой вопрос. Пожалуйста помоги.Проблемы с jquery html()

Я манипулировал элемент с возвращающейся АЯКС запросом:

$("#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); 
 
    } 
 
});

я получаю старые данные из элемента , а не новые данные ajax "1457856458".

Пожалуйста, помогите.

+1

Любые ошибки в консоли? И почему этот 'eval (html)' болтается там? Войдите в консоль, чтобы узнать, получаете ли вы правильный результат. –

+0

Ошибка. Мой код работает отлично. Проблема в том, что он возвращает OLD-данные (когда первоначально загружалась страница), а не NEW данные (после запроса ajax). Я подозреваю, что DOM не обновляется. Я хочу знать, есть ли способ обновить DOM. –

+0

Конечно, просто поместите весь html, который вы хотите обновить, в одном div, а затем используйте функцию .html() ', чтобы изменить содержимое этого конкретного div на новое в функции' success'. –

ответ

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'? –

+0

Я взял это, вместо этого каждый раз, когда вы вызываете ajax, вы тянете текст элемента с id last_comment_added в то время. – Shriike

+1

Вот ваш код 'var last_comment_added = $ (" # last_comment_added "). Text();' last_comment_added инициализируется значением элемента с last_comment_added как идентификатор, он устанавливается в исходный код за один раз и, похоже, что вы спрашивали, почему он не обновляется до нового значения после того, как у вас есть запрос ajax. Я дал ответ, что запросы на значение, которое вы передаете в запрос ajax при запуске запроса. Попробуйте, если он не сделает то, что вы хотите обновить свой вопрос, более подробно. – Shriike

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 только NEW данных. (что-то вроде: echo '1457856458';)

Смежные вопросы