我与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,但它未定义....
我怎么能解决这个问题?有什么建议??? 提前谢谢....
答案 0 :(得分:2)
如果包含上述Ajax请求的网页是从其他来源提供的,则您必须使用Web浏览器的相同原始策略。
有两种方法(基于http://forum.arduino.cc/index.php?topic=304804):
Access-Control-Allow-Origin: *
添加到Yun Web服务?callback=?
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为你工作。你能否说出它在这里是如何运作的。