簡體   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