Bacysoft.cn

 找回密码
 邀请注册
查看: 39183|回复: 0
打印 上一主题 下一主题

Discuz!X 源码分析之 ajaxget() 函数

[复制链接]
跳转到指定楼层
楼主
发表于 2013-7-26 21:28:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bacy001 于 2013-11-15 15:02 编辑
本帖含有隐含内容,如果您看不到相关代码请移步:http://www.bacysoft.cn/thread-89-1-1.html,成功注册为会员后方可访问完整内容!

函数简介:ajaxget() 函数与 ajaxpost() 一样,都是是 Discuz!X 系统中很重要的函数,是 Discuz!X 系统中 实现 Ajax 功能的重要组成部分,在整个源码中有上百次调用,掌握 ajaxget 的工作原理和使用方法对于理解 Discuz!X 系统的 Ajax 机制和针对 Discuz!X 系统的二次开发都将大有裨益。下文将为您讲解 ajaxpost 的工作原理。


函数原型:function ajaxget(url, showid, waitid, loading, display, recall)
所属文件:common.js


参数说明及示例关键代码:
url:(必填)请求的url;
showid:(必填)ajax 返回信息显示区域的 id;
waitid:ajax 请求过程中显示等待信息区域的 id;默认与showid相同
loading:在等待区域显示的提现信息,比如:“请稍后...”
display:信息返回后 showId 的 style.display 值,就是指定返回信息是否显示的
recall:信息返回后执行的代码。

ajaxget() 函数在整个 Discuz!X 中有很多处调用!粗略统计了一下,ajaxget() 和 ajaxpost() 均有100多处调用!在模版文件中一般是直接调用,在js文件中一般是间接调用。

最简单的 ajaxget() 调用的例子就是用户登录以后,在用户名后面那个“切换在线状态”的功能!即登录后处于在线状态,点击“在线”后,就切换到“隐身”状态,在点击“隐身”则又可以切换回“在线”状态。代码如下:
  1. <span id="loginstatus">
  2.     <a id="loginstatusid" href="member.php?mod=switchstatus" title="切换在线状态" onclick="ajaxget(this.href, 'loginstatus');return false;" class="xi2">在线</a>
  3. </span>
复制代码
调用流程(会员可见):
1、当用户点击“在线”的时候,将触发调用 ajaxget(),而标签 A 是不会跳转,因为 onclick 事件获得了一个 false的返回值!

2、进入 ajaxget() 函数内部处理流程,第一步便是创建 Ajax 对象!关于 Ajax 对象的更多内容,可以参考 Ajax() 函数过程。

3、设置好相关参数以后,ajaxget 调用 Ajax 对象方法 get(),执行流程将转入 Ajax.get() 执行!代码如下:
  1. x.get(url, function(s, x){...});
复制代码
url 是 ajaxget 提交的 url,根据 Ajax.get() 定义可知,当 Ajax 调用返回时,将调用 function(s,x);

4、进入 Ajax.get() 函数处理流程,服务器返回的 Ajax 信息将保存在对象中,并返回给 ajaxget 指定的函数,即 function(s,x);

5、在 function(s,x) 中,将首先将返回信息中的TEXT部分直接保存在 $('showid').innerHTML 中,然后将附带的 js 脚本添加到 <head> 部分并执行,完成动态修改在线状态,或者其他内容,添加的 js 脚本代码如下:
  1. <script type="text/javascript" id="cbbLYGtmoPqvpWrwoymULIJQFPrvolFH" charset="GBK">if(typeof succeedhandle_=='function') {succeedhandle_('http://localhost/forum.php', '隐身', {});}</script>
复制代码
ajaxget() 的核心内容,其实在 Ajax() 中,通过读源码,我们可以知道,其实 Ajax 还能实现 post 方式的交互,但是正如之前我们知道的,ajaxpost() 不是通过 Ajax() 来实现的,而是使用了 iframe 的方法!
您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-12-25 15:47 , Processed in 0.013575 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表