Javascript 使用XHR更改URL

Javascript 使用XHR更改URL,javascript,url,animation,xmlhttprequest,Javascript,Url,Animation,Xmlhttprequest,正如问题中所述,如何使下面给出的代码在发出请求和加载页面内容后更改浏览器中的URL? 我自己也不知道怎么做,我已经试了好几天了 如果可能,如何使从新页面加载的JS脚本(在请求之后)正常工作(innerHTML不会解释为脚本的结果) document.addEventListener('click',函数(事件){ if(event.target.tagName!=“A”| |!event.target.href)返回; document.body.style.opacity=0; event.p

正如问题中所述,如何使下面给出的代码在发出请求和加载页面内容后更改浏览器中的URL? 我自己也不知道怎么做,我已经试了好几天了

如果可能,如何使从新页面加载的JS脚本(在请求之后)正常工作(
innerHTML
不会解释为脚本的结果)

document.addEventListener('click',函数(事件){
if(event.target.tagName!=“A”| |!event.target.href)返回;
document.body.style.opacity=0;
event.preventDefault();
document.body.addEventListener(“transitionend”,function()){
var res=新的XMLHttpRequest();
res.addEventListener(“加载”,函数(){
如果(恢复状态!=200){
log(`Error${res.status}:${res.statusText}`);
}否则{
document.querySelector('html').innerHTML=
这种反应;
}
});
res.open(“GET”,event.target.href);
res.send();
});
});

如果需要更多说明,请在下面发表评论。

实际上,您可以在AJAX回调中更改整个页面。准备后端代码以响应文档中包含的DTD,并混淆所有结束脚本标记,例如
。然后,在回调中,执行以下操作:

else { 
    document.write(res.responseText);
}

就这样。但是,这违反了所有标准和良好实践,不要使用它。

实际上,您可以在AJAX回调中更改整个页面。准备后端代码以响应文档中包含的DTD,并混淆所有结束脚本标记,例如
。然后,在回调中,执行以下操作:

else { 
    document.write(res.responseText);
}

就这样。但是,这违反了所有标准和良好做法,不要使用它。

这是否回答了您的问题?首先在旧页面上创建一些HTML并立即更改位置没有多大意义。无论如何,如果要从响应文本执行脚本,首先必须将内容放入
documentFragment
。然后创建新的空脚本元素,获取片段中已经存在的脚本的
text
属性,并将该文本放到新创建的脚本元素中。然后将新创建的脚本元素附加到片段,最后将片段附加到
document.body
。请注意,您必须保留原始的
html
标记。或者简单地使用一个正则形式…@LuketheGeek不,那不是它,我在XHR寻找如何做到这一点,但我没有找到答案solution@MAJO如果使用XHR停留在当前页面中,那么尝试使用XHR替换整个页面的内容是没有用的(因为
document.querySelector('html')。innerHTML=..
显示了目标)。如果您需要加载新页面,请使用常规表单发送请求。好吧,已经通知过您,但祝您尝试成功……这是否回答了您的问题?首先在旧页面上创建一些HTML并立即更改位置没有多大意义。无论如何,如果要从响应文本执行脚本,首先必须将内容放入
documentFragment
。然后创建新的空脚本元素,获取片段中已经存在的脚本的
text
属性,并将该文本放到新创建的脚本元素中。然后将新创建的脚本元素附加到片段,最后将片段附加到
document.body
。请注意,您必须保留原始的
html
标记。或者简单地使用一个正则形式…@LuketheGeek不,那不是它,我在XHR寻找如何做到这一点,但我没有找到答案solution@MAJO如果使用XHR停留在当前页面中,那么尝试使用XHR替换整个页面的内容是没有用的(因为
document.querySelector('html')。innerHTML=..
显示了目标)。如果您需要加载新页面,请使用常规表单发送请求。好吧,您已经收到了建议,但祝您尝试成功……但我认为
文档。编写
不是最佳做法。@MAJO当然不是,但这是做您想做的事情的唯一方法。也许你应该详细解释一下,你到底为什么要用XHR创建整个页面,而不是加载一个新页面。。?如果它与页面转换有关,我想这才是您手头的真正问题,而询问如何使用XHR加载页面实际上是一个XY问题。但我认为
文档.write
不是最佳做法。@MAJO肯定不是,但这是做您想做的事情的唯一方法。也许你应该详细解释一下,你到底为什么要用XHR创建整个页面,而不是加载一个新页面。。?如果它与页面转换有关,我想这才是您面临的真正问题,而询问使用XHR加载页面实际上是一个XY问题。