I am trying to return JSON data if JSON is found in the HTTP header, and if not I am trying to display a normal page. But instead it always displays the JSON text, even if I do not pass the JSON in the URL! Full code is here.

if (client) {
  // an http request ends with a blank line
  boolean currentLineIsBlank = true;
  boolean sentHeader = false;
  while (client.connected()) {
    if (client.available()) {
      // client data available to read
      char c = client.read(); // read 1 byte (character) from client
      // buffer first part of HTTP request in HTTP_req array (string)
      // leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
      if (req_index < (REQ_BUF_SZ - 1)) {
        HTTP_req[req_index] = c; // save HTTP request character
      // last line of client request is blank and ends with \n
      // respond to client only after last line received
      if (c == '\n' && currentLineIsBlank) {
        if (!sentHeader) {
          // send a standard http response header
          client.println(F("HTTP/1.1 200 OK"));
        // Ajax request - send JSON output
        if (util::StrContains(HTTP_req, "json")) {
          // Spit out JSON data
          client.println("Content-Type: application/json;charset=utf-8");
          client.println("Server: ArduinoMega");
          client.println("Connnection: close");
        } else {
          client.println(F("Content-Type: text/html"));
          client.println(F("Connection: close")); // the connection will be closed after completion of the response
          client.println(F("Refresh: 1000")); // refresh the page automatically every 60 sec
          sentHeader = true;
          client.println(F("<!DOCTYPE HTML>"));
          client.println(F("Welcome to Arduino WebServer</title>"));
          util::printProgStr(client, htmlStyleMultiline );
          client.println(F("</head><body style='background-color:grey'>"));
          client.print(F("<p style='color:red';style='font-family: Arial'> LIVE: </p>"));

Please help.

  • 1
    You should output the contents of HTTP_req to see where/if json is in it.
    – Musa
    Commented Jan 3, 2017 at 18:55
  • If I run URL in browser without json text in it then how from where json will come on HTTP_req Commented Jan 3, 2017 at 19:26
  • @Musa even if I do not pass json it returns json HTTP_req GET /json HTTP/1.1 Host: U Commented Jan 4, 2017 at 17:00
  • I see a json in there, you just check the whole thing you should be only checking the url parameters
    – Musa
    Commented Jan 4, 2017 at 17:05
  • even if I do not pass json in the url parameters i still get json in HTTP_req Commented Jan 4, 2017 at 17:06

1 Answer 1


So figured out the problem, the issue was I was closing the connection instead when it was json fetched, I had to keep alive the connection.

so replaced client.println("Connnection: close"); with client.println("Connection: keep-alive");

which fixed the problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.