如何从 yaler 获得 json 回复

How to get a json response from yaler

我用yaler创建了一个账号,用来和我的arduino yun交流。它工作正常,我可以打开和关闭 LED。 然后我创建了一个网页,带有一个按钮,该按钮使用 GET 方法调用 ajax 函数到 yaler(yaler 网络服务器接受 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 会关闭和打开,但我希望 json 成功函数 (msg) 中的响应如下所示:

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

但是我得到一个错误(错误函数)。我也试图提醒 err.responseText,但它是未定义的....

我该如何解决这个问题?有什么建议么??? 提前致谢....

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

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

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

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

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

所以您的回复不是:

{"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 对你有用。你能把它是如何工作的放在这里吗?