最近在做一个物联网的项目时遇到的问题:界面上有很多控制开/关灯的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端界面

前端关键代码;

 <script type="text/javascript" src="jquery-2.1.1.js"></script>
<script type="text/javascript">
function on(led){
var btnOn = document.getElementById(led);
var led2 = led.split('_');
var btnOff = document.getElementById(led2[0]+"_off");
btnOn.disabled = true;
if(btnOff.disabled)
btnOff.disabled = false;
$.get("/testweb/ControlServlet?value="+led);
} function off(led){
var btn = document.getElementById(led);
var led2 = led.split('_');
var btnOn = document.getElementById(led2[0]+"_on");
btn.disabled=true;
if(btnOn.disabled)
btnOn.disabled = false;
$.get("/testweb/ControlServlet?value="+led);
}
</script>

Servlet接收消息并将消息传给客户端

 public class ControlServlet extends HttpServlet {

     private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String value = request.getParameter("value");
//System.out.println("收到请求!="+value);
SocketClient.clientRequst(value);
} }

客户端通过Socket通信将控制消息发给硬件端的服务监听程序

 public class SocketClient {

     public static void clientRequst(String info) {

         try {
//1. 创建客户端Socket,指定服务器地址和端口
Socket socket = new Socket("localhost",8899);
//2. 获取输出流,向服务器发送信息
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
//System.out.println("将要发送="+info); pw.write(info);
pw.flush();
socket.shutdownOutput();
pw.close();
os.close();
socket.close(); } catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
}

JS简单模拟HTTP请求: http://www.qttc.net/201208184.html

点击button传递消息,但是页面不跳转的解决方法的更多相关文章

  1. 微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone)

    微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone) 前言: 这是小菜博客的第三篇文章.一直认为自己可以表达的东西太过简单,难以上台面,总是吝啬地不肯写.就算是写,也不知道从何开始.在同事的 ...

  2. AppStore下载失败使用已购页面再试一次解决方法

    AppStore载失败 使用已购页面再试一次解决方法 工具/原料 Mac OS 方法/步骤 1.大家可以先试试更改系统 DNS 的方法,由于苹果的 App Store 应用商店在国外,所以 DNS 如 ...

  3. uni-app开发经验分享一: 多页面传值的三种解决方法

    开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...

  4. vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法

    如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫 ...

  5. 点击button会自动刷新页面

    如题 因为button标签按钮会提交表单. 解决方法如下: 1.将<button></button>改为<input type="button"> ...

  6. 问题:asp.net 点击button按钮调到页面顶部;结果:asp.net点击一个按钮,使页面跳转到本面页上的指定位置

    asp.net点击一个按钮,使页面跳转到本面页上的指定位置 (2011-04-19 16:46:51) 转载▼ 标签: it   最近在做一个项目. 用到标题所说的功能. 实现方法: 1.在aspx中 ...

  7. form表单中控件较多,加载完成后切换页面都很慢的解决方法

    form表单中控件较多,加载完成后点击都很慢,为什么?我一页面中form表单里面上百个控件(如input.select.radio.checkbox等),还有一些js脚本,加载速度还可以,都能全部显示 ...

  8. C# WinForm页面切换导致闪烁的解决方法

    问题描述 界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢:当切换页面时,也会时常产生闪烁的问题,非常影响用户体验. 解决方法 将此代码写在要解决闪烁问题的父窗体中: prot ...

  9. C# WinForm页面切换导致闪烁的解决方法(转)

    问题描述 界面上放置大量的控件(尤其是自定义控件)会导致在窗体加载时,速度变得缓慢:当切换页面时,也会时常产生闪烁的问题,非常影响用户体验. 解决方法 将此代码写在要解决闪烁问题的父窗体中: prot ...

随机推荐

  1. POJ 1328 Radar Installation【贪心 区间问题】

    题目链接: http://poj.org/problem?id=1328 题意: 在x轴上有若干雷达,可以覆盖距离d以内的岛屿. 给定岛屿坐标,问至少需要多少个雷达才能将岛屿全部包含. 分析: 对于每 ...

  2. LightOJ1094 - Farthest Nodes in a Tree(树的直径)

    http://lightoj.com/volume_showproblem.php?problem=1094 Given a tree (a connected graph with no cycle ...

  3. asterisk 问题

    Q:SIP可以呼通,但听不到声音A:一般是NAT问题造成.如果Asterisk处在NAT的后面,则Asterisk的配置如下: ------------------------------------ ...

  4. nginx.org与nginx.com有什么区别(Nginx与Nginx Plus)

    nginx.org是开源社区,管理着Nginx开源版. nginx.xom是商业社区,管理着Nginx Plus商业版. 商业版和开源版是有很大区别的,服务还加更强大的功能,当然依托开源社区加载第三方 ...

  5. 禁用Bootstrap点击空白,modal自动关闭

    手动触发modal:       $('#myModal').modal(): 禁用点击空白,modal自动关闭:$('#myModal').modal({backdrop: 'static', ke ...

  6. zerorpc使用时报错:No handlers could be found for logger "zerorpc.channel"

    问题如题:安装方法参考 http://www.cnblogs.com/shengulong/p/7887586.html ,安装完后,使用时出现如题的错误 解决办法: 1.zerorpc本身依赖很多三 ...

  7. CEF3研究(四)之javascript集成

    一.介绍 谷歌浏览器和CEF使用V8JavaScript Engine作为内容的JavaScript实现.在浏览器中的每个窗口都有它自己在的JS上下文提供作用域和在窗口中安全的执行JS代码.CEF暴露 ...

  8. Linux中断处理驱动程序编写

    本章节我们一起来探讨一下Linux中的中断 中断与定时器:中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继 ...

  9. strstr-strcat实现

    strstr 调用格式 #include <string.h> char *strstr(const char *haystack, const char *needle); 功能说明 该 ...

  10. HDU 1201 18岁生日 【日期】

    18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...