前一段時間做乙個系統功能,頁面用到比較多的非同步處理---ajax,所以在後台出現了類似的下面的**:
view code
string action = request["action"] == null ? "" : request["action"].replace("'", "");寫著寫著,發現**太長了,看著不順眼,最近有時間,想了乙個辦法,可以用到反射的處理方法。string a1 = request["a1"] == null ? "" : request["a1"].replace("'", "");
string a2 = request["a2"] == null ? "" : request["a2"].replace("'", "");
switch
(action)
先說一下思路,大概就是根據ajax的乙個引數值(值也就是方法名),來反射呼叫的方法,這樣就可以直接找到方法了,但重要的是還要解決方法的引數傳遞問題,
這裡我採用的是,反射獲取方法的引數名,然後根據引數名去查詢ajax路徑中傳遞的引數值(ajax中的引數名必需和方法的引數名一樣),這樣方法的引數問題也就解決了。好了,思路有了就實現吧!let's go!
前端:view code
後端:view code
protected這樣就可以不用寫switch case ,之前有用過一種webserivce方式,也可以解決掉這個問題,但因為webmethod方法,必需要是靜態的公共方法,才能成功被呼叫,void page_load(object
sender, eventargs e)
}public
void
action1()
public
void action2(string a1, string
a2)
//////
根據引數列表獲取url引數值
/// ///
方法引數列表
///引數值陣列
public
object
getparametervalue(parameterinfo parameter)
return
p; }
這樣就有一定的侷限性了,
前端:view code
$(function後端:() })
$.ajax(', //
這裡一定要寫成json字串形式,否則無效
datatype: "json",
success:
function
(msg)
})});
[webmethod]用這種方式的話,需要注意的是如果專案是3.5框架以下的,需要在webconfig檔案中新增如下**public static string action1()
[webmethod]
public static string action2(string a1,string a2)
其實這種方式,可以將ajax封裝起來呼叫
view code
function大概就這些了,後期還寫過解決引數中存在sting型別以外的方法(如引數中有int 型別的),或是過載的方法的解決方案,但感覺沒什麼必要,因此也就不貼出來了!還得廢話一番這種反射的方式肯定沒有直接呼叫方法的執行效率高,不過用於ajax中完成可以忽略。網上有朋友,寫了可以高效反射的解決方案。有興趣的朋友可以去ajaxmethod(methodname, data, onsuccess, onerror) , );
$.ajax(,
error:
function (event)
});}
catch
(e)
}//呼叫方式
ajaxmethod("webform3.aspx/action1", null, function (msg) )//
這裡如果封裝的指令碼放在引用指令碼中,需要注意路徑問題,確保指令碼能找到頁面
ps:不知道這種解決方式有沒有什麼弊端,也不知道還有沒其它什麼方式來解決這種類似switch case的問題,有的話望同志們告知分享。
過濾 監聽 阿賈克斯
2018年1月8日14 22 51 第一段課內容 過濾第一步 新建乙個包 com.bdqn.filter 新建乙個類 encodingfilter 實現介面implements filter dofiler的方法記得改引數名字 override public void dofilter servle...
ajax 原生阿賈克斯的請求步驟
原生ajax的5個請求步驟 1.初始化建立乙個xmlhttprequsest的例項物件 var xml new xmlhttprequest 2.建立連線 xml.open get http name luoxindong age 12,true 3.傳送請求 xml.send 4.設定監聽函式 x...
阿克曼函式的計算
上圖為阿克曼函式的定義,根據函式解析式,我們可以很容易的寫出遞迴式 def akm m,n if m 0 return n 1elif m 0and n 0 return akm m 1,1 elif m 0and n 0 return akm m 1,akm m,n 1 m,n map int,i...