zoukankan      html  css  js  c++  java
  • 使用jQuery Ajax功能的时候需要注意的一个问题


    每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接(页面需要和服务器保持长连接,而且在连接超时后需要重新请求连接)的请求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且jquery不会自动回收资源,所以导致了内存溢出。

    通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求成功或失败之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以,我们只需要在请求完成后,将传回的XMLHttprequest对象手工回收即可,代码如下:

    $.ajax({
        url: "http://www.aizr.net",
        data: { name: "xxxx" },
        dataType: "xml",
        success: function (data, textStatus) {
           //do something...
        },
        complete: function (XHR, TS) { XHR = null }
    });


    我们可以重写ajax:

    (function($){
        //备份jquery的ajax方法
        var _ajax=$.ajax;
        
        //重写jquery的ajax方法
        $.ajax=function(opt){
            //备份opt中error和success方法
            var fn = {
                error:function(XMLHttpRequest, textStatus, errorThrown){},
                success:function(data, textStatus){}
            }
            if(opt.error){
                fn.error=opt.error;
            }
            if(opt.success){
                fn.success=opt.success;
            }
            
            //扩展增强处理
            var _opt = $.extend(opt,{
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    //错误方法增强处理
                    
                    fn.error(XMLHttpRequest, textStatus, errorThrown);
                },
                success:function(data, textStatus){
                    //成功回调方法增强处理
                    
                    fn.success(data, textStatus);
                }
            });
            _ajax(_opt);
        };
    })(jQuery);

    这样写的目的就是增强,作用:可以提高用户体验,可以统一处理ajax返回的服务端错误。

  • 相关阅读:
    windows 设置nginx开机自启动
    vue js中解决二进制转图片显示问题
    oracle 各种问题
    Nginx安装及配置详解包括windows linux 环境
    AOP-切面是如何织入到目标对象中的
    AOP-通知-笔记
    AOP-方法拦截器-笔记
    JdkDynamicAopProxy-笔记
    Joinpoint继承体系-笔记
    AOP-Pointcut-笔记
  • 原文地址:https://www.cnblogs.com/tianboblog/p/3256845.html
Copyright © 2011-2022 走看看