-->
Page 1 of 1

How to respond to HTTP GET without sending data

PostPosted: Fri Jan 20, 2017 4:04 am
by samlewis02
My ESP8266 program sends a webpage which includes a header, a line of text and an image of a remote controller (from SPIFFS). I define two areas with the image as off and on buttons. When one is pressed I want the line of text to change to indicate the action. I also want the ESP8266 to be informed which area was pressed. Here is the webpage text:

Code: Select all webPage += "<!DOCTYPE html><html><head><style>h1.sansserif {font-family: Arial;color: blue;font-size:200%;}p.sans {font-family: Arial;font-size:150%;}</style></head>";
  webPage +=  "<body><center><h1 class='sansserif'>AIR CONDITIONER CONTROL</h1><hr>";
  webPage +=  "<p id='message' class='sans'>Click the on/off button to control AC</p>";
  webPage +=  "<img src='/ACremote.png' width='200' height='500' alt='Remote' usemap='#remotemap'>";
  webPage +=  "<map name='remotemap'>";
  webPage +=  "<area shape='rect' coords='28,265,88,235' alt='On' href='acon' onclick='myFunction(\"AC turned on\")'>";
  webPage +=  "<area shape='rect' coords='88,265,148,235' alt='Off' href='acoff' onclick='myFunction(\"AC turned off\")'>";
  webPage +=  "</map></center>";
  webPage +=  "<script>";
  webPage +=  "function myFunction(atext){document.getElementById('message').innerHTML = atext;}";
  webPage +=  "</script></body></html>";


There is a script function (myFunction) defined within the webpage text which makes the text line change using innerHTML when an area is selected. However, the 'href' reference in 'area' causes a GET to be sent to the ESP8266. I need this so that I can make the ESP8266 carry out the action (send IR data). I have to respond to the GET but I don't want to re-send the webpage since myFunction has already done the change I need. How should I respond to the GET? I read that status 204 can be used if No Content needs to be sent. I played around with it as follows:

Code: Select allvoid handle_acon() {
  Serial.println("AC on");
 
  // TODO send data to  ir
  server.send(204, "", "");
}
.
.
.
server.on("/acon", handle_acon);


and it seemed to work on my laptop (using Chrome browser) but on my Ipad (again using Chrome) I get a blank webpage when an area is selected. Any suggestions as to the right way to handle the GET?

Re: How to respond to HTTP GET without sending data

PostPosted: Sun Jan 22, 2017 9:47 pm
by gdsports
I think your app needs to use web sockets to do what you want. See the following ESP web socket demo.

https://gist.github.com/bbx10/667e3d4f5f2c0831d00b

Re: How to respond to HTTP GET without sending data

PostPosted: Mon Jan 23, 2017 12:55 am
by samlewis02
Thanks. Really useful example. Using Websockets my prog now working