我想把jquery的ajax方法封装成如下方法:
url是路径,MethodName是调用后台的方法名,data是参数,CallBakc成功返回的函数,
function ajax(url,MethodName,data,CallBack){
   $.ajax({  
      type: "Post",
      //方法所在页面和方法名      
       url: url+"/"+MethodName,
      contentType: "application/json; charset=utf-8",
      data: data,
      dataType: "json",
      success: function (data) { },
      error: function (err) {return;}
    });
}
调用的时候只要ajax('aa.aspx','SayHello','{"Name":"张三"}',BackName());
类似这样的调用方法,有没有高手给点宝贵意见啊。jQueryAjaxcallback

解决方案 »

  1.   

    本身就是如此,只不过调用函数名写地址而已,如果是WebService的话,可以在url里
    例如 "WebService1.asmx/GetArray"
    jQuery.post(url,data,success(data, textStatus, jqXHR),dataType)
    $.post("test.php", { name: "John", time: "2pm" },
       function(data){
         alert("Data Loaded: " + data);
       });
      

  2.   

    你   error: function (err) {return;} 对error没处理
    你再封装个人觉得意义不大
    jquery 已经有简化ajax请求的方法
    $.get$.getJSON$.post
      

  3.   

    其实$.ajax()我已经会用了,并且在项目中也是没有问题的,我只是觉得在项目的js中每次都要调用$.ajax()里面一大堆的参数。所以才想要封装下success的方法让他返回出去,我再写个js函数来进行数据解析。可是我不知道怎么写;求各位大神指点啊。
    PS:最近忙。也没时间逛论坛了。回复有点慢。各位大大勿怪啊!!
      

  4.   

    你就按照下面那个结构封装一下就是了。
    function ajax(url,MethodName,data,CallBack){
       $.ajax({  
          type: "Post",
          //方法所在页面和方法名      
           url: url+"/"+MethodName,
          contentType: "application/json; charset=utf-8",
          data: data,
          dataType: "json",
          success: function (data) { },
          error: function (err) {return;}
        });
    }
      

  5.   

    没有意义了啊,jquery已经有$.get,$.post啦啊,跟你要实现的一样啊$.post(url,data,callback)
      

  6.   

    其实$.ajax()我已经会用了,并且在项目中也是没有问题的,我只是觉得在项目的js中每次都要调用$.ajax()里面一大堆的参数。所以才想要封装下success的方法让他返回出去,我再写个js函数来进行数据解析。可是我不知道怎么写;求各位大神指点啊。
    PS:最近忙。也没时间逛论坛了。回复有点慢。各位大大勿怪啊!!不知楼主是到底要精简到什么程度
    $.get$.getJSON$.post
    你都用过了?
      

  7.   

    jAjax.ajax=function(type,url,data,beforecall,callback){
        $.ajax({ 
            type:type, 
            url:url,
            data:data,
            dataType:'json', 
            beforeSend:beforecall, 
            success:function(data){
                jAjax.cbFilter(data,callback);
            },
            error: jAjax.error
        });
    }
    jAjax.cbFilter=function(data,cb){
        if(data&&data.SessionTimeout&&data.SessionTimeout==!0){
            alert(data.msg);
            window.parent.location = data.url;
        }else{
            if(cb)cb(data);
        }
    }
    jAjax.error=function(XMLHttpRequest, textStatus, errorThrown){
        alert("ajax錯誤: status:"+(XMLHttpRequest.status)+", readyState:"+(XMLHttpRequest.readyState)+", textStatus:"+textStatus+", errorThrown:"+errorThrown);
    }
    jAjax.success=function(data){
        if(data==null)return;
        if(data.msg==undefined)return;
        data.msg!=""&&alert(data.msg);
    }
    jAjax.serialize=function(data){
        var json="";
        for(var i=0;i<data.length;i++){
            json+=data[i]+",";
        }
        return eval("("+("{"+(json.substring(0,json.length-1))+"}")+")");
    }
      

  8.   

    *
    Ajax 取得数据 (异步) 
    Info=LoadData("ajax.ashx","getInfo=do"); 
    */
    function AjaxLoadUrlData(pUrl, pData) {
        var strReturn = "";
        $.ajax({
            //async:false,//true 异步 默认true
            type: "POST",
            dataType: "text",
            url: pUrl,
            data: pData,
            success: function(data) {
                strReturn = new String(data);
            }
        });    return strReturn;
    }/*
    Ajax 取得数据 (非异步 会有等待) 一般使用这个方法
    Info=GetData("ajax.ashx","getInfo=do"); 
    */
    function AjaxGetUrlData(pUrl, pData) {
        var strReturn = "";
        $.ajax({
            async: false, //true 异步 默认true
            type: "POST",
            dataType: "text",
            url: pUrl,
            data: pData,
            success: function(data) {
                strReturn = new String(data);
            }
        });    return strReturn;
    }
      

  9.   

    我知道这样封装可以,但问题是我想要把success的函数返回出去,比如我再外面定义个函数function aa(data){//对data进行操作},我想要用这个aa()函数能够执行$.ajax()里面的success的函数,
    即当我调用函数
    ajax('CarList.asp','CarList0','{"CarID":"120"}',aa(data)),我就是想让aa(data)能够代替success:function(data)函数。
      

  10.   

    其实$.ajax()我已经会用了,并且在项目中也是没有问题的,我只是觉得在项目的js中每次都要调用$.ajax()里面一大堆的参数。所以才想要封装下success的方法让他返回出去,我再写个js函数来进行数据解析。可是我不知道怎么写;求各位大神指点啊。
    PS:最近忙。也没时间逛论坛了。回复有点慢。各位大大勿怪啊!!不知楼主是到底要精简到什么程度
    $.get$.getJSON$.post
    你都用过了?
    我就是想要将$.ajax中的success:function(data)这个方法返回出去,让我能够在$.ajax()之外操作data,
    除了$.getJSON没用过 其他都用过了,因为项目用的就是$.ajax()连接后台方法的方式来操作的,所以有的页面光写js就写了1000多行,但实际上大多数都是$.ajax()里面的一些固定的参数,所以想要写一个通用的方法来将$.ajax()的success函数放在外面来执行,这样就能减少很多代码了。
      

  11.   

    其实这个问题主要的目的就是获取jquery中ajax事件的返回值的
    方法1:用回调方法
    <script>
    //获取名称的方法,参数为一个函数
    function getName(){        
            $.ajax({       
                            type:"POST",
                            url:"提交路径",
                            data:"key=value",
                            success:callback//绑定下面定义好的回调方法
            });
    }//回调方法
    function callback(data){ 
            //所有操作都在这里执行        
    }//调用方法就执行
    getName();
    </script>
    方法2:添加async: false.即修改为同步
    <script>
    function getName(){
            var name = "";
            $.ajax({       
                    type:"POST",
                    url:"提交路径",
                    data:"key=value",        
                    async :false,
                    success:function(data){ 
                            name = data;
                    }    
            });
            return name;
    }
    </script>
    来源出处:jquery学堂交流社区 - http://bbs.jq-school.com/showtopic-188.aspx
      

  12.   

    ajax不太好封装,或者是,ajax本身就已经封装了。根据情况来封装吧,没有啥通用的,通用的都没啥意思了。一下是我根据实际需求的一种封装,只适合一种情况。/* new 判断是否登录app*/
    Nature.SSO.prototype.isLoginApp = function (callback) {
        var self = this;
        self.writeDebug("判断是否登录网站应用");
        self.ajaxApp({
            title: "是否登录网站应用",
            data: { action: "WhoAmIAjax" },
            success: function (data) {
                self.writeDebug("获取到app登录状态:" + data.state + "(执行回调函数)");
                callback(data);
            }
        });
        
    };/* new 登录app*/
    Nature.SSO.prototype.loginApp = function (data, callback) {
        var self = this;
        self.writeDebug("登录app,设置app的标识。沟通标识:" + data.miwen);
        data.miwen = decodeURIComponent(data.miwen);    self.ajaxApp({
            title: "登录网站应用",
            data: { action: "login", miwen: data.miwen, guid: data.guid },
            success: function (data2) {
                self.writeDebug("写入本地标识:userSsoID:" + data2.userSsoID + "(执行回调函数)");
                callback(data2);
            }
        });};/* sso里的统一ajax 
    本域,/SSOApp/WebApp.ashx,不缓存
    */
    Nature.SSO.prototype.ajaxApp = function(info) {
        var self = this;
        
        info.dataType = "json";
        info.url = "/SSOApp/WebApp.ashx";    self.ajax(info);
       
    };/* 跨域,sso服务器,mySelf.SSOInfo.ssoUrl + "/SSOAuth/SSOAuth.ashx,不缓存*/
    Nature.SSO.prototype.ajaxSso = function(info) {
        var self = this;    info.dataType = "jsonp";
        info.url = self.SSOInfo.ssoUrl + "/SSOAuth/SSOAuth.ashx";    self.ajax(info);
    };
    /* 跨域,资源服务,mySelf.SSOInfo.resourceUrl + "/SSOAuth/SSOAuth.ashx,不缓存*/
    Nature.SSO.prototype.ajaxService = function (info) {
        var self = this;    info.dataType = "jsonp";
        info.url = self.SSOInfo.resourceUrl + "/SSOApp/WebApp.ashx";    self.ajax(info);
    };/*   ajax 提交  */
    Nature.SSO.prototype.ajax = function (info) {
        var self = this;
        $.ajax({
            type: "GET",
            dataType: info.dataType,
            url: info.url,
            data: info.data,
            cache: false,
            error: function () {
                var err = "获取" + info.title + "的时候发生错误!";
                self.writeDebug(err);
                alert(err);
            },
            success: function (data) {
                if (typeof (parent.DebugSet) != "undefined")
                    if (typeof (data.debug) != "undefined") parent.DebugSet(data.debug);            info.success(data);
            }
        });
    }
      

  13.   

    能加关注么,刚刚看到你用ajax写SSO的正好有几个问题想要问你,