WordPress的全站Ajax加载(二)异步加载

JS or jQuery, 转自点点 9 年前 回复

, , , ,

上文。通过寥寥几条评论 还是能看出大家比较喜欢这种局部刷新的效果的。今天将带大家进入异步加载的核心部分。另外由于个人不是从事IT相关的工作 有时候比较忙,更新文章不是很勤快,请谅解 呵呵。我也只是上学的时候学过一点C和java后来也无疾而终,这方面的东西也只是爱好。我也只能抽空写点东西,比如上班的时候-,-就是今天。好,不啰嗦 走起。

Ajax其实比较比较泛指,最低层的应该是.ajax(); 基于这个底层方法 JQuery又有多种类型。比如 .load(); .getScprit();  .getJSON(); 等等...想了解的话 可以自己去看API文档。最近单的应该就是.load();方法了。有多简单呢?

$("#contents").load("url #contents");

完了? 对完了。这行代码的意思就是 在页面的#contents DIV内载入地址为URL的页面,并且只取#contents元素内容,其他丢弃。当然只靠这一句代码是完成不了所有动作的,那就需要你的想象力了,请看下面内容:

$('a[target!=_blank]').live('click',function(){                   //所有a链接不为新标签打开的链接 绑定click事件。
var url = $(this).attr("href"); //获取a链接的地址
var title = $(this).attr("title"); //获取新链接的title
$('#contents').fadeTo(500,0.3); //内容部分模糊
#("#contents").load("url #contents",function(){ //开始加载
$('#contents').fadeTo(200,1); //完成后 内容部分重新显示
window.document.title = title; //设置标题
});
})

好了,这样就基本完成基本功能了。以上是使用.load()方法实现的异步加载。是不是很简单,如果你想使用底层的.ajax方法 那就请继续往下看。

在之前一片文章,我们提到过 如果想让ajax彻底不加载head,sidebar,foot等部分 需要传值。当然不加载这部分优缺点都有。优点自然是减少请求数据提高访问速度。缺点就是不执行head部分,你的wordpress插件可能有的地方会失效,还有就是获取不到新页面的关键字 准确的标题等。怎么传值呢?首先你要明白,用户第一次进来的时候 是全部加在的,直到ajax执行了 才不去加载。而搜索引擎是不会去执行你的JS文件的。所以搜索引擎下 就不怕只输出部分内容 影响soe了。 在wordpress中 公用的部分 都是使用  这样来调用的。那么我们可以用下面的方法传值。

< ?php  $soz=$_POST["soz"]; if ($soz != "ajax") { get_header();  } ?>

另外 get_sidebar(); 和 get_footer(); 也用同样使用上面方法传值。(去掉#号)                                         这样$soz的值就是load。 不等于后面的ajax后 就会加载。这样我们在后面的ajax中 给$soz传值为ajax后。 就不会加载这部分了。详细如下:

$('a[target!=_blank]').live('click',function(){                   //所有a链接不为新标签打开的链接 绑定click事件。
var url = $(this).attr("href"); //获取a链接的地址
var title = $(this).attr("title"); //获取新链接的title
$('#contents').fadeTo(500,0.3);
$.ajax({
url:url,
data: "soz=ajax", //传值
dataType: "html",
type: "post", //使用post方式加载
success:function(message){
var msger = $("message");
window.document.title = ttitle;
$("#content").html(msger);
$('#contents').fadeTo(200,1);
script = jQuery("#afterrun script"); //解决ajax JS运行的问题。
for (var i = 0;i < script.length;i++) eval(jQuery(script[i]).html());
}
,
error: function() {
$("#content").html("AJAX Error...");
} ,
});
})

好了上面代码就是通过底层.ajax方法实现的。和之前的.load方法 差不多。需要注意的就是 js在ajax后 执行的问题。到这里,ajax的核心代码已经完成 。其他动作那就要根据你自己来制定了。不如ajax过程中的动画,啥的小细节。我相信如果你对JQuery比较熟悉的话 应该也是很容易的一件事。

通过上面的方法,你会发现AJAX加载时没什么问题的,但是地址栏的URL是不会改变的。前进后退也不能用。那改怎么解决呢?不要着急,我会在下一篇文章中为大家介绍我使用过的2种方案,欢迎大家来围观。。。

 

From: http://soz.im/wordpress-full-ajax-load-2-asynchronous-loading.html

支付宝打赏微信打赏

如果此文对你有帮助,欢迎打赏作者。

发表评论

欢迎回来 (打开)

(必填)