原始是每次切换一次选项都会发起请求,这样会降低效率,我们可以将请求后的数据保存下来,然后下次根据请求地址直接获得请求内容,这样同url每次只需请求一次。
为此专门写一个JQ插件来做这件事就很有必要。插件具体内容:
- (function($){
- //存放請求過的地址
- var _request_list = Array ();
- jQuery.ajaxOnce = function (options){
- //與jquery ajax參數保持一致
- var settings = {
- type: "POST",
- url: "",
- data: "",
- cache: true,
- async: true,
- success: ""
- }
- if(options){
- jQuery.extend(settings,options);
- }
- //回調
- var _successfun = settings .success;
- //驗證是否已請求
- var _msg = validReq (settings.url);
- if(_msg){
- if(typeof _successfun == "function"){
- _successfun(_msg);
- }
- }else{
- //執行ajax請求
- jQuery.ajax({
- type: settings.type,
- url: settings.url,
- data: settings.data,
- cache: settings.cache,
- async: settings.async,
- success: function(msg){
- addContent(settings.url,msg);
- if(typeof _successfun == "function"){
- _successfun(msg);
- }
- }
- })
- }
- //檢查請求是否存在
- function validReq($parm_url){
- for($ _i = 0 ;$_i < _request_list.length ; $_i++){
- if(_request_list[$_i]['url'] == $parm_url){
- return _request_list[$_i]['content'];
- }
- }
- return false;
- }
- //添加指定url內容
- function addContent($parm_url,$param_content){
- _combin = Array ();
- _combin['url'] = $parm_url;
- _combin['content'] = $param_content;
- _request_list.push(_combin);
- }
- }
- })(jQuery)
我只是将JQ自带的AJAX函数封装了下,具体调用和原来调用AJAX是一样的,只不过调用方式由jQuery.ajax换成了jQuery.ajaxOnce。
后续:
如果需要将数据长时间保存,可以利用本地存储将数据保存至本地,网上开源程序APC.js专门用来处理这种需求,并合理地利用不同浏览器的特性,详细内容: http://vquickphp.com/?a=blogview&id=33