Javascript 如何从yaler获取json响应

Javascript 如何从yaler获取json响应,javascript,ajax,json,arduino-yun,Javascript,Ajax,Json,Arduino Yun,我创建了一个与yaler的帐户,与我的arduino yun进行通信。它工作正常,我可以打开和关闭我的LED。 然后,我创建了一个网页,带有一个按钮,该按钮通过GET方法调用ajax函数到yaler(yaler web服务器接受URL上的REST样式) 这段代码似乎工作得很好,实际上led会开关,但我希望成功函数(msg)中会有json响应,如下所示: { "command":"digital", "pin":13, "value":1, "action":"write" } 但是我得到了一个

我创建了一个与yaler的帐户,与我的arduino yun进行通信。它工作正常,我可以打开和关闭我的LED。 然后,我创建了一个网页,带有一个按钮,该按钮通过GET方法调用ajax函数到yaler(yaler web服务器接受URL上的REST样式)

这段代码似乎工作得很好,实际上led会开关,但我希望成功函数(msg)中会有json响应,如下所示:

{
"command":"digital",
"pin":13,
"value":1,
"action":"write"
}
但是我得到了一个错误(错误函数)。我还试图提醒err.responseText,但它未定义

我怎样才能解决这个问题?有什么建议吗???
提前感谢….

如果包含上述Ajax请求的网页来自不同的来源,则您必须使用Web浏览器的相同来源策略

有两种方法可以做到这一点(基于):

  • ,即将标题
    访问控制允许来源:
    添加到Yun Web服务
  • ,即,如果Ajax调用使用查询参数
    ?callback=?

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

我也遇到了同样的问题。我用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='1〕http://try.yaler.net/realy-domain/analog/13/210';
$.ajax({
键入:“GET”,
url:url,
async:false,
jsonpCallback:'showResult',
contentType:“应用程序/json”,
数据类型:“jsonp”,
成功:函数(json){
console.dir(json.action);
},
错误:函数(e){
控制台日志(e.message);
}
});
};
函数showResult(show)
{
var str=“command=“+show.command;//您可以用同样的方法处理其他问题。
警报(str);

}
Hi,Yaler中继将请求转发到Yun Web服务器,该服务器“接受URL上的REST样式”。如果云发送回复,它将通过中继转发回您的客户端。如果没有云,你将从中继得到504响应。在任何其他情况下,都可以很安全地假设响应来自您的设备,在本例中是云。调试的第一步可能是确保代码在本地网络中工作。您好,托马斯(Yaler.net的创始人)您好,谢谢您的回复,ajax功能可以关闭和打开云端上的LED,退出很好。该代码位于一个localhost html页面中,它与云通信。我需要的是成功地接收上面描述的json数据,操作数据,我认为这可能是一个浏览器限制,因为这是一个跨域请求。。。我可以使用哪种方法在html页面中获取json数据?为什么是“跨域请求”?HTML不是来自同一个Yun吗?嗨,tamberg,我需要从驻留在不同域中的HTML页面控制Yun。换句话说,yun位于我家,HTML位于www.xxxxxxx.com域中。在这种情况下,我可以与来自世界各地的云一起工作。我不知道这是不是最好的方法。事实上,我能够与云通信(我可以关闭云的pin上的一个),但我无法接收json格式的信息,就像是yaler页面,它以json格式向我显示pin的状态。我需要json响应来操作数据,例如,将它们插入db…Yaler只是来回转发请求和响应。但是,对于本地IP和Web上的站点,同源策略可能不同。一般的解决方案是在标题中添加“访问控制允许源代码:*”(请参见和),但我不确定如何为Yun的内置restapi实现这一点。
showResult({command:"analog",pin:13,value:0,action:"write"});