JSONP en servidor Arduino - CrossDomain

Uso: Un sitio web alojado en el dominio X quiere obtener datos de un Arduino con Ethernet Shield alojado en el dominio Y.
JSONP es la forma de implementar llamados AJAX Cross Domain:

Referencias:
      http://api.jquery.com/jQuery.ajax/
      http://json-p.org/
      http://www.funcion13.com/2012/04/12/como-realizar-peticiones-ajax-cross-domain-jsonp-jquery/

Test.php:


<html>

<head>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/funciones.js"></script>
</head>

<body>

<input id="detectar" type="button" value="Detectar...">

</body>

<script>
$(document).ready(function() {

$("#detectar").click(function() {
invocarAjax();
});
});

</script>

</html>

funciones.js


function arduinoEthernetComCallback(data)
{
alert("data es!!: " + data);


var j = eval('(' + data + ')');

alert(j["A5"]);

}

function invocarAjax()
{
rnd = '&random=' + Math.floor(Math.random()*9999999999);

$.ajax({
 url : 'http://192.168.0.200:93?rnd='+rnd,
 dataType : 'jsonp',
 crossDomain : true
});
}

Sketch:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,200);
char callback[27] = "arduinoEthernetComCallback";
EthernetServer server(93);
void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}
void loop()
{
  EthernetClient client = server.available();

  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: application/json");
          client.println("Connection: close");     
          client.println();

          client.print(callback);
          client.print("('{");
          for (int i=0; i<6; i++) {
            client.print("\"A");
            client.print(i);
            client.print("\": ");
            client.print(i*10);
            if (i != 5) {
              client.print(",");
            }
          }
          
          client.println("}')");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }

    delay(1);

    client.stop();
  }


No hay comentarios:

Publicar un comentario