转:http://hi.baidu.com/wrjgg/blog/item/2bf63eea37827df5cf1b3e28.html
最近在看最土团购系统,做一个二次开发,当分析到Ajax得时候,怎么也理不清思路,于是查查资料整理了一下,现在已经很清楚了,在这里分享一下,方便大家以后学习和开发。
最土开源团购程序ajax操作:
1.ajax返回信息显示对话框
if ( $act
$html = render('ajax_dialog_order');
json($html, 'dialog');
}
2.提示窗口
json('充值失败', 'alert');
3.客户端页面重新载入
json(null, 'refresh');
4.客户端同时执行多个操作,例如本例为显示完提示对话框后,重新载入页面
json(array(
array('da
array('da
), 'mix');
5.客户端端执行相应的Javas
json("X.misc.noticenext({$id},{$nid});", 'ev
6.执行相关的局部更新操作
$d = array(
'html' => $v,
'id' => 'coupon-dialog-display-id',
);
json($d, 'updater');
---------------------------------------------
服务器端与ajax相关操作的函数
include/function/common.php
function json($da
$type = strtolower($type);
$allow = array('ev
if (false==in_array($type, $allow))
return false;
Output::Json(array( 'da
}
include/class/output.class.php
staticpublic function Json($da
{
$result = self::error( $error );
if ( null !== $da
{
$result['da
}
die( json_encode($result) );
}
---------------------------------------------
客户端JS函数
X.get = function(u) {
return X.ajax(u, 'GET')
};
X.post = function(u) {
return X.ajax(u, 'POST')
};
X.ajax = function(u, method){
jQuery.ajax({
url: u,
dataType: "json",
success: X.json
});
return false
};
X.json = function(r){
var type = r['da
var da
if (type == 'alert') {
alert(da
} else if (type == 'ev
ev
} else if (type == 'refresh') {
window.location.reload()
} else if (type == 'updater') {
var id = da
var inner = da
jQuery('#' + id).html(inner)
} else if (type == 'dialog') {
X.boxShow(da
} else if (type == 'mix') {
for (var x in da
r['da
X.json(r)
}
}
};
js调用:
在模板manage_team_edit.html中有这样一段js:
这里算是jQuery使用的入口,经分析,在后台处理的时候没有加载Jquery文件的链接,但是在系统中就是存在这样的文件并且被使用了,
最后经查阅相关资料,发现最土开发人员把所有要调用的js全部通过shell压缩到index_no.js和index.js里面了。在用到的时候,就调用这两个文件就可以了。这样多个文件放在一起减少了请求的服务器的次数,减少页面加载JS的大小,使页面响应更快。下面是具体的代码:
这样一分析,所有的问题都明朗啦