zoukankan      html  css  js  c++  java
  • 点击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

  • 相关阅读:
    Java创建对象的几种方式
    Sqlserver建立Oracle的鏈接服務器
    千万级的大表!MySQL这样优化更好
    ConurrentHashMap和Hashtable的区别
    BTree和B+Tree详解
    为什么MySQL数据库索引选择使用B+树?
    网易跟贴这么火,背后的某个力量不可忽视
    知物由学 | 如何利用人工智能来对抗DDoS攻击?
    揭秘医疗安全防卫战:“我们仍在购买不安全的医疗设备”
    6月第5周业务风控关注 | 《网络安全等级保护条例(征求意见稿)》本周正式发布
  • 原文地址:https://www.cnblogs.com/lahblogs/p/4479682.html
Copyright © 2011-2022 走看看