五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > AJAX下客戶端調(diào)用服務(wù)端頁(yè)面方法

AJAX下客戶端調(diào)用服務(wù)端頁(yè)面方法

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):593    更新時(shí)間:2009-10-09 10:37   參與評(píng)論

1.客戶端代碼如下:

//函數(shù)功能:客戶端調(diào)用頁(yè)面服務(wù)端方法

//示例:

//參數(shù)說(shuō)明:

//isStaticMethod:是否是靜態(tài)方法

//methodName:方法名稱

//methodParamter:[可選]方法參數(shù),必須是類型MethodParamter的實(shí)例或者null值(無(wú)參數(shù))
//callBackMethod:[可選]方法調(diào)用完后回調(diào)的客戶端方法,客戶端方法形式為 function callBackMethod(result){},result是個(gè)json對(duì)象,例如:function HandleCheckListResult(result){},參數(shù)值就是'HandleCheckListResult'
//assemblyAndClassName:[可選]頁(yè)面服務(wù)端所在組件和類名,形式為: 'AssemblyName|ClassFullName',例如: Weiky.dll|Weiky.AccessoriesForm'
function CallPageMethod(isStaticMethod,methodName,methodParamter,callBackMethod,assemblyAndClassName)
...{
    if(methodParamter && typeof(methodParamter.AddBoolParamter) != 'function')
    ...{
        alert(“參數(shù)methodParamter必須是類型MethodParamter的實(shí)例或者null值");
        return;
    }
    if(assemblyAndClassName == null)
    ...{
        if(typeof(AssemblyAndClassName) != 'undefined')
        ...{
            assemblyAndClassName = AssemblyAndClassName;
        }
        else
        ...{
            alert("未提供頁(yè)面服務(wù)端所在組件和類名");
            return;
        }
    }
    try
    ...{
        MyWebService.CallPageMethod(assemblyAndClassName,isStaticMethod,methodName,methodParamter?methodParamter.ToJson():null,methodParamter.ToType(),callBackMethod?callBackMethod:'', CallBackByWebService,HandleServiceMethodCallError);                                       
    }
    catch(err)
    ...{
        alert('將參數(shù)轉(zhuǎn)換成JSON對(duì)象失?。?);
    }
}

function CallBackByWebService(result)
...{
    var json = ConvertStringToJson(result);
    if(json.Type != 0)
    ...{
        ShowMessageBox2(json);
    }
    else
    ...{
        var callBackMethod = json.HighlevelMessage;
        if(callBackMethod != '')
        ...{
            json.HighlevelMessage = '';
            json.Message = ReplaceString(json.Message,'┍',' ');
            eval(callBackMethod + '(json)');
        }
    }
}

function MethodParamter()
...{
    var paramter = '';
    var json = null;
   
    this.AddStringParamter = function (value)
    ...{
        AddParamter('string',ReplaceString(ReplaceString(value,'"','\"'),' ','┍'));
    }
   
    this.AddGuidParamter = function (value)
    ...{
        AddParamter('guid',value);
    }
   
    this.AddDateParamter = function (value)
    ...{
        AddParamter('date',value);
    }
   
    this.AddIntParamter = function (value)
    ...{
        AddParamter('int',value);
    }
   
    this.AddDecimalParamter = function (value)
    ...{
        AddParamter('decimal',value);
    }
   
    this.AddBoolParamter = function (value)
    ...{
        AddParamter('bool',value);
    }
   
    function AddParamter(type,value)
    ...{
        if(paramter != '')
        ...{
            paramter += ','
        }
        paramter += '{"Type":"' + type + '","Value":"' + value + '"}';
    }
   
    this.AddJsonParamter = function (p)
    ...{
        json = p;
    }
   
    this.ToJson = function ()
    ...{
        if(json)
        ...{
            return json;
        }
        if(paramter != '')
        ...{
            return eval('[' + paramter + ']');
        }
       
        return null;
    }
   
    this.ToType = function ()
    ...{
        return json?1:0;
    }
}
2.服務(wù)端webservice提供給ScriptManager控件,webservice代碼如下:

[System.Web.Script.Services.ScriptService]
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class MyWebService : System.Web.Services.WebService
    ...{
[WebMethod(EnableSession = true)]
        public string CallPageMethod(string assemblyAndClassName, bool isStaticMethod, string methodName, object paramtersPackage,int mpType,string callBackMethod)
        ...{
            try
            ...{
                object result = "";
                bool succeed = false;
                if (isStaticMethod)
                ...{
                    Type type = GetActualType(assemblyAndClassName);
                    if (type != null)
                    ...{
                        succeed = true;
                        if (mpType == 1)
                        ...{
                            result = type.InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, null, null, new object[] ...{ paramtersPackage });
                        }
                        else
                        ...{
                            result = type.InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static, null, null, GetMethodArgs(paramtersPackage));
                        }
                    }
                }
                else
                ...{
                    object o = WebBase.GetActualInstance(assemblyAndClassName, this.Server.MapPath("~/bin/"));
                    if (o != null)
                    ...{
                        succeed = true;
                        if (mpType == 1)
                        ...{
                            result = o.GetType().InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, o, new object[] ...{ paramtersPackage });
                        }
                        else
                        ...{
                            result = o.GetType().InvokeMember(methodName, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance, null, o, GetMethodArgs(paramtersPackage));
                        }
                    }
                }

                return succeed ? 0 : 1, succeed ? (result == null ? "" : result.ToString()) : string.Format("獲取組件信息失敗,請(qǐng)檢查組件參數(shù){0}是否正確", assemblyAndClassName);
            }
            catch (Exception err)
            ...{
                return err.Message;
            }
        }
private object[] GetMethodArgs(object paramtersPackage)
        ...{
            if (paramtersPackage == null) return null;

            int i = 0;
            object[] args = new object[((object[])paramtersPackage).Length];
            foreach (System.Collections.Generic.Dictionary<string, object> p in (object[])paramtersPackage)
            ...{
                switch (p["Type"].ToString().ToLower())
                ...{
                    case "string":
                        args[i++] = p["Value"].ToString().Replace("┍"," ");
                        break;
                    case "guid":
                        args[i++] = new Guid(p["Value"].ToString());
                        break;
                    case "date":
                        args[i++] = Convert.ToDateTime(p["Value"].ToString());
                        break;
                    case "int":
                        args[i++] = Convert.ToInt32(p["Value"].ToString());
                        break;
                    case "decimal":
                        args[i++] = Convert.ToDecimal(p["Value"].ToString());
                        break;
                    case "bool":
                        args[i++] = Convert.ToBoolean(p["Value"].ToString());
                        break;
                    default:
                        args[i++] = p["Value"];
                        break;
                }
            }
            return args;
        }
 private WebBaseForm GetActualInstanceForm(string assemblyAndClassName)
        ...{
            object o = WebBase.GetActualInstance(assemblyAndClassName,this.Server.MapPath("~/bin/"));
            if (o != null)
            ...{
                if (o is WebBaseForm)
                ...{
                    return (WebBaseForm)o;
                }
            }

            return null;
        }

        private Type GetActualType(string assemblyAndClassName)
        ...{
            if (assemblyAndClassName != "")
            ...{
                string[] ac = assemblyAndClassName.Replace("!", "\").Split('|');
                if (ac.Length == 2)
                ...{
                    ac[0] = WebBase.AddPath(ac[0],this.Server.MapPath("~/bin/"));
                    return System.Reflection.Assembly.LoadFrom(ac[0]).GetType(ac[1]);
                }
            }

            return null;
        }
}
 3.客戶端調(diào)用示例:

function DataDDL_Change(ddl)
        ...{
            var mp = new MethodParamter();
            mp.AddIntParamter(DropDownList_GetValue(ddl));
            mp.AddIntParamter(EntityObjectId);
            CallPageMethod(true,'GetEntityData',mp,'LoadDataTree');
        }
       
        function LoadDataTree(json)
        ...{
alert(json.Message);
}
總結(jié):通過(guò)這樣的封裝,客戶端調(diào)用服務(wù)端靜態(tài)/實(shí)例方法非常方便,并且不會(huì)引起任何頁(yè)面的postback。上面所用客戶端技術(shù)有ajax,json等
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (593人查看0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)