Entspricht $.load ohne jQuery

Lesezeit: 3 Minuten

Ich möchte einige Jade-Inhalte auf Knopfdruck in ein bestimmtes div laden. Ich habe herausgefunden, wie man das mit jquery macht, es gibt mehrere Beiträge dazu, und im Wesentlichen möchte ich Folgendes tun

$('#div').load('/somePage');

Ich kann jQuery jedoch nicht in meinem Projekt verwenden. Gibt es eine entsprechende Funktion in Vanilla Javascript?

  • “Vanilla JavaScript” hat keine Vorkehrungen für etwas wie Ajax. Browser haben die alte XMLHttpRequest API und neuere unterstützen die fetch() API.

    – Spitze

    30. Juni 2016 um 20:20 Uhr

  • Ähnliches findet man in youmightnotneedjquery.com

    – Jimmy Ko

    30. Juni 2016 um 20:23 Uhr

  • Siehe auch die fetch API.

    – Campbell

    30. Juni 2016 um 20:44 Uhr

Benutzer-Avatar
Ali BARIN

Ich denke, Sie können dies mit dem Folgenden tun;

var request = new XMLHttpRequest();

request.open('GET', '/somepage', true);

request.onload = function() {
  if (request.status >= 200 && request.status < 400) {
    var resp = request.responseText;

    document.querySelector('#div').innerHTML = resp;
  }
};

request.send();

Übrigens können Sie dies auch mit der Abruf-API tun.

fetch('/somepage')
  .then(function(response) {
    return response.text();
  })
  .then(function(body) {
    document.querySelector('#div').innerHTML = body;
  });

Übrigens kann man lesen diesen Blogbeitrag um etwas über die Abruf-API zu lernen.

  • Hinweis: Fetch wird von keiner der IE-Versionen, dem neuesten Safari und dem neuesten Firefox unterstützt. developer.mozilla.org/en-US/docs/Web/API/…

    – Jonathan Laliberte

    17. Juni 2018 um 23:25 Uhr

  • @JonathanLaliberte Ich glaube nicht, dass ReadableStream für einen solchen Fall notwendig ist. Ich würde also sagen, dass alle modernen Browser (außer IE) es unterstützen. Außerdem gibt es ein Polyfill für die Browser, die Fetch nicht unterstützen. github.com/github/fetch

    – Ali BARIN

    19. Juni 2018 um 7:12 Uhr

  • Guter Start, aber uns fehlt der Teil, in dem wir eine Teilmenge der zurückgegebenen Seite angeben können. Ich habe einen Anfang dazu in einem separaten Thread gefunden.

    – Schnellschaltung

    21. Oktober 2019 um 1:10 Uhr

  • Ich erhalte, dass das Dokument nicht definiert ist

    – Normajean

    2. April 2021 um 8:28 Uhr

  • @Normajean könnten Sie bitte eine neue Frage mit einigen Code-Snippets posten, die Sie verwenden?

    – Ali BARIN

    2. April 2021 um 14:37 Uhr

Während ich versuchte, das gleiche Problem zu lösen, habe ich dies gemacht, das auf Ali BARINs Antwort basiert und großartig zu funktionieren scheint, aber eine etwas explizitere Version ist, fügt hinzu init Informationen und hat eine gewisse Logik zu verwenden document.getElementById anstatt querySelector.

/*
 * Replicates the functionality of jQuery's `load` function, 
 * used to load some HTML from another file into the current one.
 * 
 * Based on this Stack Overflow answer:
 * https://stackoverflow.com/a/38132775/3626537
 * And `fetch` documentation:
 * https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
 * 
 * @param {string} parentElementId - The ID of the DOM element to load into
 * @param {string} htmlFilePath - The path of the HTML file to load
 */
const loadHtml = function(parentElementId, filePath) {
    const init = {
        method : "GET",
        headers : { "Content-Type" : "text/html" },
        mode : "cors",
        cache : "default"
    };
    const req = new Request(filePath, init);
    fetch(req)
        .then(function(response) {
            return response.text();
        })
        .then(function(body) {
            // Replace `#` char in case the function gets called `querySelector` or jQuery style
            if (parentElementId.startsWith("#")) {
                parentElementId.replace("#", "");
            }
            document.getElementById(parentElementId).innerHTML = body;

        });
};

  • Wie greifen Sie auf das Dokument in document.getElementById(parentElementId).innerHTML = body von der Serverseite zu? Ich erhalte Dokument ist nicht definiert..

    – Normajean

    2. April 2021 um 8:25 Uhr

Sie können es so machen, aber es gibt etwas, worauf Sie dabei achten müssen.

const getData = (url) => {
  return new Promise((resolve, reject) => {
    let request = new XMLHttpRequest();
    request.onload = function () {
      if (this.readyState === 4 && this.status === 200) {
        resolve(this.responseText);
      } else {
        reject(this.responseText);
      }
    };
    request.open("get", url, true);
    request.send();
  });
};

getData("Your URL")
  .then((resolve) => {
    console.log(resolve);
  })
  .catch((reject) => {
    console.error(reject);
  });

Ich möchte, dass Sie darauf achten, wenn Sie eine URL zu einer Seite hinzufügen, von der sie zurückgegeben wird <html> zu </html> als String, ich denke, es gibt keine Möglichkeit, sich davon wie eine Methode zu trennen .load() in jQuery.

1011560cookie-checkEntspricht $.load ohne jQuery

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy