2015-10-26 4 views
0

Я пытаюсь иметь div с динамическим контентом в нем с помощью JQuery .load(), но ни одно из предлагаемых нами решений не работает, как я хочу.Jquery .load() перезаписывает всю страницу

В настоящее время у меня есть следующие настройки:

t1.html (главная страница)

<html> 
    <head> 
     <title>TODO supply a title</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <script src="ts1.js"></script> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.js"></script> 
    </head> 
    <body> 
     <div>TODO write content</div> 
     <script> 
      $(document).ready(function(){ 
       init_s(); 
      });   
     </script> 
     <div> 
      <div id="dt1"></div> 
     </div> 
    </body> 
</html> 

t3.php (содержание, которое, как предполагается, должен быть загружен)

<?php 
    echo '<div id="dt1"><script>document.write(Date());</script></div>'; 
?> 

ts1.js (файл содержит скрипт)

function init_s() 
{ 
    setInterval(function(){ 
    $("#dt1").load('t3.php'); 
    }, 2000); 
}; 

, но я просто не кажется, чтобы заставить его работать. После загрузки страницы она выполняет команду и полностью заменяет тело документа.

Я также пробовал другие подходы, как

$("#dt1").load('t3.php #dt1>*',''); 

и

$("#dt1").load('t3.php #dt1'); 

Поскольку все тело теперь заменяется содержимым dt1 в t3.php, сам ДИВ отсутствует и, следовательно, никаких обновлений не поступает.

Я подумал, что, возможно, мне нужно обернуть еще один div вокруг div и такого, но я не избавляюсь от поведения «заменить все тело» вообще, что приводит к единственному обновлению, которое заменяет все тело вместо содержимого из div.

ответ

1

Это то, что document.write.

Если вы запустите его в документе, который находится в закрытом состоянии (то есть, который уже загружен (который имеет значение t1.html)), он будет неявно вызывать document.open и удалять существующий документ.

Использование DOM-манипуляции вместо document.write.

+0

Думаю, это имеет смысл. Тем не менее, я немного не понимаю, как получить результат. Есть ли элегантный подход, или я просто попытаюсь загрузить t3.php в var и извлечь данные, а затем использовать replacewith?Это кажется мне очень неудобным – Bryde

0

По-видимому, лучше всего не использовать javascript для разметки другой страницы. Получил рабочее решение, опираясь на простой PHP в t3.php.

вызов в ts1.js остается тем же

function(){ 
    setInterval(function(){ 
     $("#dt1").load('t3.php'); 
    }, 2000); 
}; 

для t3.php я использовал следующее, чтобы проверить, если он работает по назначению

<?php 
    $date = date('Y-m-d H:i:s'); 
    echo $date; 
?> 

удаления document.write(), как Квентин предложила решить проблему переопределения, вместо этого используя регулярные результаты echo e PHP, возвращающие содержимое в DIV, как ожидалось, и не требуют манипуляции с DOM, которая является самым простым подходом для моего проекта.

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