Проблема с отображением JAVASCRIPT при загрузке POST

#javascript #php #html

#javascript #php #HTML

Вопрос:

Я использую следующий код для выбора данных для отображения пользователю без необходимости перехода на другую страницу.

 <script type="text/javascript">
$(document).ready(function() {
  $('#testform input[name=date]').datepicker({
    autoHide: true
  });
  $('#testform').submit(send);
});

function send() {
  const data = $(this).serialize();
  $('#output').text("FormData: "   data);
  $.ajax({
    type: "POST",
    url: "receiving_file.php",
    data,
    success: function(data) {
  document.getElementById("PrintData").outerHTML = data;
  document.getElementById("PrintImg").src = data;
    }
  });
  return false;
}
</script>
  

Чтобы отобразить выходные данные, не переходя на другую страницу, я пишу в коде:

 <p id="PrintData">
  

Код в файле receiving_file.php выглядит так:

 <?php
$date = $_POST['date'];
print $date;
?>
  

Проблема в том, что я хочу использовать JavaScript в поступающих данных, и это не работает. Однако, когда я пытаюсь просмотреть исходный код в браузере, я не вижу данных.

У кого-нибудь есть идея, как решить проблему?

Спасибо

Ответ №1:

Вам нужно предотвратить поведение отправки по умолчанию, иначе ваша форма продолжит отправляться в обычном режиме, и вы не увидите, что часть ajax завершена.

 function send(e) {
    e.preventDefault(); // prevent native submission
    // ... rest of your code as before
}
  

Я немного изменил ваш пример, чтобы заставить его работать в этом jsFiddle. Вам не понадобятся все эти изменения, но при моделировании Ajax-запросов в jsFiddle вы должны опубликовать html, который хотите видеть в ответе.

Ответ №2:

Если я правильно понял ваш вопрос, проблема должна заключаться в том, что вы пытаетесь изменить outerHTML элемента вместо innerHTML:

 document.getElementById("PrintData").outerHTML = data;
  

тогда как это должно быть:

 document.getElementById("PrintData").innerHTML = data;
  

outerHTML изменяет сам HTML-тег, а не его содержимое.

Комментарии:

1. Я не думаю, что это проблема, поскольку в ответе возвращается блок html. Хотя это может повлиять на формат отображаемого html, это не будет иметь никакого отношения к тому, работает запрос Ajax или нет.

2. Да, это имеет смысл.