[英]How to load JSON from URL and display by using plain javascript on HTML page?
[英]How to load content from specific HTML-element of URL using AJAX with plain JavaScript?
我只是想替换<main>
-Element 和firstPage.html
的内容...
// ... header of my 1st document ...
<body>
<main>
The content of the 1st document...
</main>
</body>
// ... footer of my 1st document ...
...使用<main>
-Element 及其内容secondPage.html
...
第二页.html
// ... header of my 2nd document ...
<body>
<main>
The content of the 2nd document...
</main>
</body>
// ... footer of my 2nd document ...
...通过纯 JavaScript 使用 AJAX 调用。 我怎么能那样做?
我可以使用多种方法将第二个文档完全加载到第一个文档中,但是我在 JavaScript 中找不到任何解决方案来将另一个 URL 中的特定 HTML 元素加载到第一个文档的 DOM 中。 :(
更新/编辑:
这是我的 ajax 函数的现状:
var myLoad = ( type, url, data, success ) => { var d = data ? ( typeof data == 'string' ) ? data : Object.keys(data).map(k=>( encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) )).join('&') : '' ; var u = (d && type==='GET') ? url+'?'+d : url ; var x = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"); x.open(type,u); x.onreadystatechange = () => { if( x.readyState > 3 && x.status == 200 ){ success(x.responseText) } }; x.setRequestHeader('X-Requested-With','XMLHttpRequest'); if( type === 'POST' ){ x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); x.send(d); } else { x.send(); } return x; }; myLoad( 'GET', 'secondPage.html', '', r => { // of course this loads the whole document (secondPage.html) into <main> // but how to do otherwise ??? document.querySelector('main').innerHTML = r; };
您可以使用fetch API
来获取 HTML 作为文本。
然后使用DOMParser
将其解析为 HTML 以获取新的 HTML 并将其添加到旧的<main>
。
在这种情况下,我在 DOM 加载后立即添加了 HTML ( DOMContentLoaded
),但您最终可以将其更改为适合您需要的任何内容:
document.addEventListener('DOMContentLoaded', DOMContentLoadedJS, false);
function DOMContentLoadedJS(event) {
//fetch html as text
fetch("/page2.html").then(response => response.text()).then(AfterFetchingHTML);
}
function AfterFetchingHTML(htmlText) {
let main1 = document.querySelector("main"); //<main> on page1.html
let htmlParser = new DOMParser();
let htmlDoc = htmlParser.parseFromString(htmlText, "text/html");
let main2 = htmlDoc.querySelector("main"); //main on page2.html
//clear children from first <main>
while (main1.firstChild) main1.removeChild(main1.firstChild);
//add new <main>
main1.innerHTML = main2.innerHTML;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.