我们有相当标准的网站,我有一项任务是将页面之间的链接转换为AJAX调用,但是也维护直接链接(例如,来自搜索引擎的链接)。
我的目标是:
我在jQuery手机中看到了类似的东西,但我正在寻找更通用的解决方案,从:)获得灵感(或者借用代码)。)
发布于 2012-05-08 10:43:31
好的,首先,您需要能够分离外部和内部链接。为此,我编写了以下JQuery选择器:
$.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请求,并将结果吐入正文
$("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调用中的新元素替换。
发布于 2012-05-08 10:23:48
让页面通过AJAX加载而不是自然的HTTP行为相对容易实现。这只是一个劫持链接、停止默认点击行为和执行AJAX魔术的问题。
$(document).on('a', 'click', function (e) {
e.preventDefault();
// perform your AJAX
});有点头疼的是爬行。您需要同时编写客户端和服务器端代码才能实现Google (这基本上是真正重要的,对吧?)你会想要阅读谷歌的开发者文档,让它与Googlebot一起工作。
https://stackoverflow.com/questions/10496637
复制相似问题