Как использовать Ajax для удаления XML-файла, загруженного в DOM - PullRequest
0 голосов
/ 11 октября 2018

Я студент по программированию, я создал эту программу, которая использует Ajax для получения rain.xml, который говорит («дождь в Испании идет в основном на равнине») с сервера, а затем записывает его на текущую страницу (эта часть работает).Но что произойдет, если я захочу удалить файл rain.xml с текущей веб-страницы с помощью другой кнопки с надписью «Нажмите, чтобы удалить лишний текст».

Я пытаюсь понять, может ли Ajax удалять файлы или нет, или мне пришлось бы использовать Javascript для этого.Совет признателен, спасибо.

<html>
<head>

<style>

#hidereveal
{
margin:auto;
width:90%;
height:auto;
border: 1px black solid;
text-align:center;
}

p
{
text-align:center;
}
</style>
</head>
<body>

<div id="hidereveal">

<p>this is a test, when you click the button and ajax will add in more data 
from the server<button type="button" onclick="loadDoc()">Click to load the 
ajax text</button><button type="button" onclick="removeExtratext()">Click to 
remove the extra text</button></p>


</div>

<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("hidereveal").innerHTML += this.responseText;
}
};
xhttp.open("GET", "rain.xml", true);
xhttp.send();
}
</script>

<script>
function removeExtratext() {
//????
}
</script>


</body>

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Ajax не имеет ничего общего с удалением файлов.С Ajax вы создаете request и получаете response.

Этот ответ вы добавили в свой существующий элемент HTML hidereveal с обычным Javascript.

document.getElementById("hidereveal").innerHTML += this.responseText;

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

document.getElementById("hidereveal").innerHTML += `<span id="newContent">${this.responseText}</span>`;

Теперь у вас есть новый контент в элементе, на который вы можете сослаться, и ваша функция removeExtratext может выглядеть следующим образом.

function removeExtratext() {
    let nc = document.querySelector('#newContent');
    nc.parentNode.removeChild(nc);
}

и ваш новый текст пропал.Есть и другие способы достижения той же цели, но я думаю, что это самый простой способ понять.Я надеюсь, что смогу помочь.

0 голосов
/ 11 октября 2018

Вам не нужно использовать ajax для изменения элементов DOM.Вы использовали AJAX, чтобы получить файл и использовать его содержимое для изменения содержимого элемента с идентификатором «hidereveal». AJAX просто используется для получения данных или отправки данных на сервер, например, или записи в файл (и многих других).Просто подсказка, вам не нужно создавать 2 тега сценария.Вы можете создать имя файла, например, myScripts.js и добавить тег сценария в конце тела.

<body>
  .....
  
  <script src="myScripts.js"></script>
</body>
Я рекомендую вам начать использовать прослушиватели событий JavaScript.

document.querySelector('#addContent').addEventListener('click', function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("hidereveal").innerHTML += this.responseText;
    }
  };
  xhttp.open("GET", "rain.xml", true);
  xhttp.send();
});

document.querySelector('#removeContent').addEventListener('click',function removeExtratext() {
  document.getElementById("hidereveal").innerHTML = "";
});
#contentChanger
{
margin:auto;
width:90%;
height:auto;
border: 1px black solid;
text-align:center;
}

p
{
text-align:center;
}
<html>
<head>
  <meta charset="UTF-8">
</head>
<body>
  <div id="contentChanger">
    <p>this is a test, when you click the button and ajax will add in more data from the server
      <button type="button" id = "addContent">Click to load the ajax text</button>
      <button type="button" id = "removeContent">Click to  remove the extra text</button>
    </p>
  </div>
  <div id="hidereveal">
    come to the dark side, we have cookies!
  </div>
<script src='myScripts.js'></script>
</body>

Я изменил ваш HTML, потому что вы также удалили кнопки из HTML.У меня нет rain.xml, но удаление работает.Так что попробуйте.Надеюсь, это поможет.

0 голосов
/ 11 октября 2018

Точно так же, как вы добавили в innerHTML элемента "#hidereveal", вы можете установить / перезаписать этот innerHTML полностью с помощью

document.getElementById("hidereveal").innerHTML = "";

Если вы хотите сохранить что-то еще, создайте еще один элемент div сдругой идентификатор внутри hidereveal, и поместите туда XML.

<div id="hidereveal">
    <div id="xml"></div>

    <p>this is a test...</p>
</div>

и используйте новый элемент, чтобы поместить XML в

document.getElementById("xml").innerHTML += this.responseText;

и удалить его с тем же самым

document.getElementById("xml").innerHTML = "";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...