gpt4 book ai didi

php - 根据 Ajax 请求更新整个页面

转载 作者:IT王子 更新时间:2023-10-29 01:13:43 26 4
gpt4 key购买 nike

我有一个 AJAX 请求,可能有两种结果:

  1. 服务器响应一条消息,我应该将它放在 <div>
  2. 服务器响应一个 HTML 页面,在这种情况下,我需要用一个新页面替换当前页面并更改地址(客户端在请求之前知道地址)。

如果我有需要处理这两种情况的 AJAX 请求,解决方案是什么?

 url = "http://example.com"
ajax.request(callback)

function callback(response) {
if (case2(response)) {
history.pushState({}, "New page", url);
document.innerHTML = response
} else {
updateDiv(response)
}
}

我对实现第一个分支的正确方法感兴趣,或者服务器是否可以以某种方式编写一个 header ,使浏览器将响应作为通常的 HTTP 响应处理并更新页面位置和内容,例如重定向与给定的内容。

我知道服务器可以返回链接而不是页面,但在这种情况下,客户端需要一个额外的阶段 - 重定向,然后在服务器上填充新页面。

最佳答案

坦率地说,我认为这种方法基本上被设计破坏了。你不应该在那个地方做出那个决定。例如,ajax 响应只能表示应该加载一个全新的页面,然后在对新 URL 的第二个(非 ajax)请求时生成新内容。

如果你被迫走你已经走的路,并且响应内容不是很大,你可以尝试 Javascript-URIs。基本上, javascript:"string" 形式的 URI 将加载该字符串作为源代码的新页面。因此,如果 response 已经是一个字符串,只需将 javascript:response 分配给 window.location.href 就足够了。也许您必须事先进行一些转义。而且我不知道这种方法的跨浏览器兼容性如何。

<a href="javascript:response">load</a>

也是可以的。

其中的一个变体是不使用变量名,而是使用实际的字符串数据来构建 URL。喜欢

function source2url(src) {
// make valid javascript string from source text
var esc1 = src
.replace(/\\/g, '\\\\')
.replace(/\'/g, '\\\'')
.replace(/\x0A/g, '\\x0A')
.replace(/\x0D/g, '\\x0D');

// make valid url from that
return "javascript:'" + encodeURIComponent(esc1) + "'";
}

window.location.href = source2url(response);

当然,这会生成相当大的 URI。而且地址栏中始终会显示 Javascript-URI。

更新

类似的方法是在数据 URI 中使用 base64 编码。 Wikipedia entry解释了它是如何工作的,包括一个 javascript 示例。但是,您必须 base64-encode内容以某种方式。 (注意:您可以使用带或不带 base64 编码的数据 URI。您必须查看是什么为您的特定内容提供了更短的 URI。)

关于php - 根据 Ajax 请求更新整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com