等效于不带jQuery的$.fn.load

r3i60tvu  于 2023-03-17  发布在  jQuery
关注(0)|答案(3)|浏览(121)

我想在单击按钮时将一些Jade内容加载到某个div中。我已经找到了如何使用jQuery来实现这一点,有几篇关于它的帖子,本质上我想做的是

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

但是,我无法在我的项目中使用jQuery。在vanilla JavaScript中是否有等效的函数?

h22fl7wq

h22fl7wq1#

我想你可以用以下方法做到这一点;

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();

顺便说一句,你也可以用fetch API来实现。

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

顺便说一下,您可以阅读this blog post来了解一些关于fetch API的知识。

wribegjk

wribegjk2#

当我试图解决同样的问题时,我创建了这个基于Ali BARIN's answer的版本,看起来工作得很好,但它是一个更明确的版本,添加了init信息,并有一些逻辑使用document.getElementById而不是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;

        });
};
knsnq2tg

knsnq2tg3#

你可以这样做,但有件事你必须注意

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);
  });

我想让你注意的是,如果你把URL放到一个页面上,它会把它作为字符串从<html>返回到</html>,我想没有办法像jQuery中的.load()方法那样把它分开。

相关问题