dwr框架帶引數,而且有返回值的方法呼叫
dwr框架主要就是可以使用js在前端直接呼叫後臺的java方法,這個框架是基於ajax實現的,也可以理解為是對ajax的封裝,不過dwr框架很直接,只要後臺有寫好的執行方法,就可以直接呼叫,action層之類等等完全不用寫,這是我對dwr一點個人理解,如果不妥,還請指正。
dwr框架的配置這裡就不說了,網上有很多,說的也很詳細,我這裡就不介紹了,唯一要說明的一點就是dwr框架要用兩個jar包,dwr.jar和commons-logging.jar這兩個包,當初配置的時候,看了好幾個配置介紹,都沒有提及後面的jar包。
好,廢話說完了,下面進入正題,配置完成後,就可以在前端用js直接呼叫java的後臺方法,但是當初第一次呼叫就出問題了,如果呼叫一個帶引數而且有返回值的方法,改怎麼呼叫那?作為一個菜鳥,百度是我的解決辦法,不過查了很長時間,最後居然在外網找到了解決辦法,我很鬱悶!
我的前端dwr的js引用是這樣的:
<!-- 引入dwr框架js檔案 -->
<script type="text/javascript" src="/BaiduMap/dwr/util.js"></script>
<script type="text/javascript" src="/BaiduMap/dwr/engine.js"></script>
<script type="text/javascript" src="/BaiduMap/dwr/interface/sql.js"></script>
sql.js是配置檔案裡面自己配置的,不懂的看看dwr配置流程就OK了
那麼帶參有返回值的方法呼叫改怎麼寫那,我最終查到幾種方法,但是隻記住和用到其中一種
呼叫格式基本是這樣:
sql.MethodName(引數1,引數2,function(value){
var str = value;
})
var str1 = str;
基本格式就是這樣,如果沒有引數,直接不寫引數就可以,MethodName就是方法名,value是用來接收返回值,大多數應該都是json字串,特殊的返回值,例如Map,list等等就不介紹了。
但是到了這裡就會出現一個很蛋疼的不算bug的bug,因為dwr預設是非同步執行的,所以,在這個sql.MethodName()裡面,無法給外部變數賦值,所以,如果輸出str1,就會出現未定義錯誤。
本人菜鳥,解決方法有兩種,第一:把dwr的非同步更改為同步,在方法呼叫前面或者隨便合適的地方,加上這句話:
dwr.engine.setAsync(false);//為false 則是同步執行
很顯然,第一種方法只能飲鴆止渴,所以我找到了第二種,把要執行的js程式碼段,放到呼叫方法裡面,如下:
sql.selectTwo(select_type,select_date,function(value){
var json = JSON.parse(value); //後臺獲取的json資料串
function getNum(arr,n,v) {
for (var i = 0; i < arr.length; i++)
if (arr[i][n]==v)
return arr[i];
}
document.getElementById("uptd01").innerHTML= getNum(json,"sid",1).sum;
})
菜鳥寫的程式碼不好,但是意思大家應該能看懂,直接把執行的程式碼段在接收返回值的方法裡面執行,這樣就不用給外部變數進行賦值操作了,不用擔心同步和非同步的問題。
好了,敲了這麼半天鍵盤,這幾天用dwr框架遇到的問題差不多都記下來了,給自己留個備份,同時希望能給需要幫助的人提供參考!
最後再說一句,CSDN的草稿箱真是個好東西,我寫到一多半斷網,頁面沒了,傷心欲絕,通網之後,居然儲存在草稿箱裡面,瞬間樂的我無法形容!
相關文章
- DWR中Java方法的引數及返回值、物件javabeanJava物件Bean
- Spring框架下的 “介面呼叫、MVC請求” 呼叫引數、返回值、耗時資訊輸出Spring框架MVC
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- C# 帶引數帶互鎖多執行緒呼叫方法C#執行緒
- python中getattr如何帶引數呼叫?Python
- 動態呼叫帶引數的儲存過程儲存過程
- Jersey 框架取到所有引數的方法框架
- Java呼叫儲存過程(帶輸出引數)Java儲存過程
- dos下呼叫帶輸出引數的儲存過程儲存過程
- Javascript 定時器呼叫傳遞引數的方法JavaScript定時器
- scala 呼叫 java 方法引數匹配問題Java
- DWR框架入門例子框架
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- 在DWR中呼叫Http Servlet 物件HTTPServlet物件
- spring呼叫帶引數的oracle函式應注意的問題SpringOracle函式
- sendEmail帶的引數AI
- Java中無參帶返回值方法的使用Java
- vue js事件方法呼叫api並返回值VueJS事件API
- mysql Sql引數用?而不用@MySql
- 使用DWR時,回撥函式的返回值沒法賦給js中的全域性變數函式JS變數
- SSM框架中Mybatis傳遞引數的幾種方法SSM框架MyBatis
- 基礎才是重中之重~Emit動態構建方法(引數和返回值)MIT
- java形式引數和返回值的深入研究Java
- 形式引數和返回值型別的對比型別
- 使用自定義委託來呼叫Lua中的多返回值和長引數型別函式型別函式
- c++函式引數和返回值C++函式
- 細說函式返回值與引數函式
- 函式的呼叫方式和引數函式
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- 反射-通過反射獲取無參無返回值成員方法、帶參帶返回值成員方法並使用反射
- 命令列引數 opencv呼叫命令列OpenCV
- python 呼叫 cmd 而不顯示黑框的方法Python
- 07:函式之函式的引數和返回值函式
- 前端框架iframe相互呼叫方法前端框架
- Java中形式引數與返回值問題Java
- C#中呼叫SQL儲存過程(帶輸入輸出引數的例子)C#SQL儲存過程
- 封裝帶引數的函式封裝函式
- 同名函式的 帶 params 引數 與 不帶 params 引數的執行優先順序函式