繁体   English   中英

如何从 yaler 获得 json 响应

[英]How to get a json response from yaler

我在 yaler 创建了一个帐户,以与我的 arduino yun 进行交流。 它工作正常,我可以打开和关闭我的 LED。 然后我创建了一个网页,带有一个按钮,该按钮使用 GET 方法调用 ajax 函数到 yaler(yaler web 服务器接受 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,但它是未定义的....

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

如果包含上述 Ajax 请求的 Web 页面是从不同的源提供的,则您必须解决 Web 浏览器的相同源策略。

有两种方法可以做到这一点(基于http://forum.arduino.cc/index.php?topic=304804 ):

  • CORS ,即添加头Access-Control-Allow-Origin: *到 Yun Web 服务
  • JSONP ,即如果 Ajax 调用请求带有查询参数?callback=?

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

我有同样的问题。 我用 JSONP 来解决它。 JSONP 是带有填充的 JSON。 基本上意味着您使用某种包装器发送 JSON 数据。 您必须发送 Java Script 函数而不仅仅是数据,这是互联网允许的。

所以,而不是你的回应是:

{"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); }

我的 JSON 用 showResult() 包装,因此它制作了 JSONP 以及我在回调中调用的函数。

希望这可以帮助。 如果 CORS 为您工作。 你能不能把它在这里是如何工作的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM