2013-09-02 5 views
0

У меня есть HTML-файл, который, когда вы нажимаете кнопку, Ajax загружает файл PHP, а файл PHP затем повторяет некоторый текст обратно в файл HTML.PHP echo перезаписывает предыдущее echo

Проблема в том, что если я нажму кнопку второй раз (или третий, или четвертый и т. Д.), Следующий эхо перезаписывает предыдущее эхо.

Например, если я нажму кнопку в первый раз, это будет echo text here. Если я нажму на него второй раз, он перезапишет предыдущее эхо и снова отобразит text here вместо того, чтобы показывать его на новой строке.

Вот HTML/Ajax:

<html> 
    <body> 
    <div id="show-more-results"></div> 
    <center><a class="btn show-more">Show more comments</a></center> 

    <script type="text/javascript"> 
     var videoid = <?php echo $video_id; ?>; 

     $(document).ready(function() {  
     $(".show-more").click(function() { 
      num_comments += 10; 
      $.ajax({ 
      url: 'assets/misc/test.php', 
      type: "POST", 
      data: {video_id: videoid, num: num_comments}, 
      success: function(data) { 
       $("#show-more-results").html(data); 
      } 
      }); 
     }); 
     }); 
    </script> 
    </body> 
</html> 

PHP:

<?php 
    $videoid = $_POST['video_id']; 
    $num_comments = $_POST['num']; 

    echo $videoid; 
?> 

Как я могу сделать так, что последующие эхо-сигналы из файла PHP не перезаписывать предыдущее эхо?

+1

эхо не переписывает друг друга – Joren

ответ

2

Вместо того, чтобы использовать функцию .html(), которая будет перезаписать содержимое элемента каждый раз, использовать .append() добавить к нему вместо:

$("#show-more-results").append(data); 
+0

Спасибо, отлично работает. :) Отметьте как решено, когда смогу (6 мин). – John

0

Что-то вроде

$("#show-more-results").append("<p>" + data + "</p>"); 

Обертывание данные <p> теги будут содержать его аккуратно, но вам может понадобиться другой контейнер.

0

Каждый запрос представляет собой отдельный сценарий exectuion, это похоже на загрузку новой страницы. Вы не говорите, что HTML с предыдущей страницы перезаписывает HTML с текущей страницы, не так ли?

Если вы хотите сохранить «историю», вам нужно либо накапливать репоны в вашем javascript-коде, либо помещать в некоторое постоянное хранилище (Memcache, DB и т. Д.) И возвращать целые данные.

0

Вы должны добавить результат вместо его замены.

//This 
$("#show-more-results").html(data); 

should be 
$("#show-more-results").append(data); 
0

Это не РНР echo что переписав значение, но ваше использование jQuerys html() функции. Он устанавливает данные HTML для элемента #show-more-results в новое значение. (Фактически переписав предыдущее значение)

Чтобы получить желаемый результат, просто сцепить предыдущее значение с новым значением:

$("#show-more-results").html(
     $("#show-more-results").html() + '<br />' + data 
); 

Или еще короче:

$("#show-more-results").append('<br />' + data); 
0

В функции успеха, используйте document.createElement и createTextNode и appendChild, чтобы добавлять элементы в документ.