首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

$.ajax返回函数有关问题

2013-08-01 
$.ajax返回函数问题我想把jquery的ajax方法封装成如下方法:url是路径,MethodName是调用后台的方法名,data

$.ajax返回函数问题
我想把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());
类似这样的调用方法,有没有高手给点宝贵意见啊。 jQuery Ajax callback
[解决办法]
你   error: function (err) {return;} 对error没处理
你再封装个人觉得意义不大
jquery 已经有简化ajax请求的方法
$.get

$.getJSON

$.post
[解决办法]

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))+"}")+")");
}


[解决办法]
其实这个问题主要的目的就是获取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
[解决办法]
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);


        }
    });
}

热点排行