如何从yaler获得json响应

时间:2015-02-28 03:05:56

标签: javascript ajax json arduino-yun

我与yaler创建一个帐户,与我的arduino yun交流。它工作正常,我可以打开和关闭我的LED。 然后我创建了一个网页,其中一个按钮使用GET方法调用ajax函数给yaler(yaler web server接受URL上的REST样式)

$.ajax({
   url: "http://RELAY_DOMAIN.try.yaler.net/arduino/digital/13/1",
   dataType: "json",
   success: function(msg){
      var jsonStr = msg;
    },
   error: function(err){
       alert(err.responseText);
   }

});

此代码似乎工作正常,事实上led开关关闭和打开,但我希望成功函数(msg)中的json响应如下:

{
"command":"digital",
"pin":13,
"value":1,
"action":"write"
}

但我收到错误(错误功能)。我也尝试提醒err.responseText,但它未定义....

我怎么能解决这个问题?有什么建议??? 提前谢谢....

2 个答案:

答案 0 :(得分:2)

如果包含上述Ajax请求的网页是从其他来源提供的,则您必须使用Web浏览器的相同原始策略。

有两种方法(基于http://forum.arduino.cc/index.php?topic=304804):

  • CORS,即将标题Access-Control-Allow-Origin: *添加到Yun Web服务
  • JSONP,即如果Ajax调用请求查询参数?callback=?
  • ,则让Yun提供额外的JS函数

CORS可能可以在Yun的OpenWRT部分配置,而JSONP可以添加到Brige.ino代码中(您似乎正在使用它)。

答案 1 :(得分:0)

我遇到了同样的问题。我用JSONP来解决它。 JSONP是带填充的JSON。基本上意味着您使用一种包装器发送JSON数据。 不仅仅是你必须发送Java脚本功能的数据,互联网也允许这样做。

所以不是你的回应是:

{"command":"digital","pin":13,"value":0,"action":"write"}

应该是:

showResult({command:"analog",pin:13,value:0,action:"write"});

我改变了yunYaler.ino来做这件事。

所以对于html:



 var url = 'http://try.yaler.net/realy-domain/analog/13/210';
      $.ajax({
        type: 'GET',
        url: url,
        async: false,
        jsonpCallback: 'showResult',
        contentType: "application/json",
        dataType: 'jsonp',
        success: function(json) {
          console.dir(json.action);
        },
        error: function(e) {
         console.log(e.message);
        }
        });
 
        };
    function showResult(show)
      {
      
          var str = "command = "+show.command;// you can do the others the same way.
          alert (str);
      }




My JSON包含一个showResult(),因此它创建了JSONP及其在回调中调用的函数。

希望这会有所帮助。如果CORS为你工作。你能否说出它在这里是如何运作的。