點擊button傳遞消息,但是頁面不跳轉的解決方法


  最近在做一個物聯網的項目時遇到的問題:界面上有很多控制開/關燈的button,通過點擊button來控制各個燈的亮滅。我需要將獲取的不同的點擊事件消息,以Socket通信的方式發送給硬件端的服務監聽程序。但是當點擊button將消息發送到某個Servlet中時,界面會跳轉。

解決方案:

1.解決頁面跳轉

用jquery+ajax發送Get請求。

用法: $.get( url, [data], [callback] )

參數:

url (String) :  發送請求的URL地址.

data (Map) : (可選) 要發送給服務器的數據,以 Key/value 的鍵值對形式表示,會做為QueryString附加到請求URL中。

callback (Function) : (可選) 載入成功時回調函數(只有當Response的返回狀態是success才是調用該方法)。

2.解決當點擊“打開”按鈕后,按鈕變為灰色不可點;當點擊“關閉”按鈕后,按鈕變為灰色不可點,“打開”按鈕變為可點

 可在js中通過改變button的disabled屬性,來動態控制按鈕的狀態。當disabled=true時,按鈕不可點;當disabled=false時,按鈕可點。

具體解決過程:

web端界面

前端關鍵代碼;

 1 <script type="text/javascript" src="jquery-2.1.1.js"></script>
 2 <script type="text/javascript">
 3   function on(led){
 4       var btnOn = document.getElementById(led);
 5       var led2 = led.split('_');
 6       var btnOff =  document.getElementById(led2[0]+"_off");
 7        btnOn.disabled = true;
 8        if(btnOff.disabled)
 9        btnOff.disabled = false;
10       $.get("/testweb/ControlServlet?value="+led);
11   }
12  
13   function off(led){
14       var btn = document.getElementById(led);
15       var led2 = led.split('_');
16       var btnOn =  document.getElementById(led2[0]+"_on");
17       btn.disabled=true;
18       if(btnOn.disabled)
19       btnOn.disabled = false;
20       $.get("/testweb/ControlServlet?value="+led);
21   }
22 </script>

Servlet接收消息並將消息傳給客戶端

 1 public class ControlServlet extends HttpServlet {
 2 
 3     private static final long serialVersionUID = 1L;
 4     public void doGet(HttpServletRequest request, HttpServletResponse response)
 5             throws ServletException, IOException {
 6             String value = request.getParameter("value");
 7             //System.out.println("收到請求!="+value);
 8             SocketClient.clientRequst(value);
 9     }
10 
11 }

客戶端通過Socket通信將控制消息發給硬件端的服務監聽程序

 1 public class SocketClient {
 2    
 3     public static void clientRequst(String info) {
 4       
 5         try {
 6             //1. 創建客戶端Socket,指定服務器地址和端口
 7             Socket socket = new Socket("localhost",8899);
 8             //2. 獲取輸出流,向服務器發送信息
 9             OutputStream os = socket.getOutputStream();
10             PrintWriter pw = new PrintWriter(os);
11             //System.out.println("將要發送="+info);
12             
13             pw.write(info);
14             pw.flush();
15             socket.shutdownOutput();
16             pw.close();
17             os.close();
18             socket.close();
19             
20         } catch (UnknownHostException e) {
21             e.printStackTrace();
22         } catch (IOException e) {
23             e.printStackTrace();
24         }
25  
26    }
27 }

 

JS簡單模擬HTTP請求: http://www.qttc.net/201208184.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM