首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将站点转换为页面之间的AJAX转换(也称为完整页面AJAX)

将站点转换为页面之间的AJAX转换(也称为完整页面AJAX)
EN

Stack Overflow用户
提问于 2012-05-08 10:13:09
回答 2查看 2.2K关注 0票数 0

我们有相当标准的网站,我有一项任务是将页面之间的链接转换为AJAX调用,但是也维护直接链接(例如,来自搜索引擎的链接)。

我的目标是:

  • 让直接链接像以前一样工作(旧IE的哈希回退),从直接链接到的顺利过渡和使用AJAX的进一步浏览。
  • 实现一些“垃圾收集”(以前查看过的页面的DOM、脚本处理程序等)

我在jQuery手机中看到了类似的东西,但我正在寻找更通用的解决方案,从:)获得灵感(或者借用代码)。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-08 10:43:31

好的,首先,您需要能够分离外部和内部链接。为此,我编写了以下JQuery选择器:

代码语言:javascript
复制
$.expr[':'].internal = function (obj) {
    return (obj.hostname == location.hostname);
};

$.expr[':'].external = function (obj) {
    return (obj.hostname != location.hostname);
};

这使您可以选择所有内部或外部链接$("a:internal")....

接下来,您需要覆盖所有内部链接上的单击事件,重写默认行为,抓取Href url并对href URL执行ajax请求,并将结果吐入正文

代码语言:javascript
复制
    $("a:internal").click(ajaxLinkHandler);

    function ajaxLinkHandler() {
       $.get($(this).attr("href"), function(data) {
       $('body').html(data);
     });
}

您还需要查看history.js,以启用浏览器历史记录/后退按钮和地址栏更新。您还需要在服务器端检测AJAX请求,并且只返回<body>,否则返回所有内容并将上面的示例更改为$("html").html(data).

您需要处理onLoad/DOM事件,或者使用新的"On“Handler $(document).on("click", "a", ajaxLinkHandler),这样当单击事件冒泡到文档时,它将检查它是否是从锚标记启动的,因此不需要onReady事件。

浏览器为您管理DOM垃圾收集。打开任何JQuery页面,转到firebug/chrome工具DOM选项卡并检查文档。然后转到console选项卡,键入$("html").remove()返回到DOM选项卡,您将看到它被彻底清除。您正在调用replace()而不是remove,因此旧的DOM元素将被AJAX调用中的新元素替换。

票数 3
EN

Stack Overflow用户

发布于 2012-05-08 10:23:48

让页面通过AJAX加载而不是自然的HTTP行为相对容易实现。这只是一个劫持链接、停止默认点击行为和执行AJAX魔术的问题。

代码语言:javascript
复制
$(document).on('a', 'click', function (e) {
    e.preventDefault();
    // perform your AJAX
});

有点头疼的是爬行。您需要同时编写客户端和服务器端代码才能实现Google (这基本上是真正重要的,对吧?)你会想要阅读谷歌的开发者文档,让它与Googlebot一起工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10496637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档