2011-08-17 53 views
1

我在從本地網絡上的硬件獲取json時遇到問題。使用jQuery從本地網絡上的硬件獲取JSON通過IP/device.json

,我可以查看使用該地址在瀏覽器中的JSON代碼:

http://192.168.1.103/device.json

我還保存生成的文本文件device.json並把它放在同一個目錄中我的test.php文件。

此代碼:

$.getJSON('device.json',function(data) { 

     $.each(data.mainunit.sensors, function(i, sensor) { 

     $("#results").append('<p>'+sensor.name+' = '+sensor.tc+'</p>'); 

     }); 

這不起作用:(改變device.json到http://192.168.1.103/device.json

$.getJSON('http://192.168.1.103/device.json',function(data) { 

     $.each(data.mainunit.sensors, function(i, sensor) { 

     $("#results").append('<p>'+sensor.name+' = '+sensor.tc+'</p>'); 

     }); 

我的猜測是代碼在無法查看JSON文件IP地址。

在此先感謝。

+0

這真的很煩人這個東西如何失敗默默。 Firebug有一個'Net'選項卡,可以顯示http標題和Ajax請求的響應,這可能會給你一些線索。 – MattSmith

回答

1

你應該用一些回調函數包裝你的JSON。如果您device.json看起來像這樣:

{ "a" : true, "b" : false } 

將其修改爲JSONP兼容:

my_wrapper() { { "a" : true, "b" : false } } 

如何申請:

$.ajax({ 
    url: "http://192.168.1.103/device.json", 
    type: "GET", 
    dataType: "jsonp", 
    jsonpCallback: "my_wrapper", 
    success: function(data) { 
    //Handle data 
    } 
} 

沒有測試的代碼。

+0

謝謝,我將不得不聯繫設備製造商,看看他們是否可以添加。謝謝。 – swudev

+0

製造商正在發佈補丁以提供JSONP。感謝請求示例。 – swudev

1

可能是一個同源策略違規:

由於瀏覽器的安全限制,大多數「Ajax」的請求都受到同源策略;該請求無法成功從不同的域,子域或協議中檢索數據。

在這一頁上的「附加說明」:http://api.jquery.com/jQuery.getJSON/

+0

你可以通過web服務器代理請求,或者使用mod_proxy或者如果它的體積很小(我懷疑它是這樣),你可以寫一個服務器端腳本來接收你的json請求,點擊設備(例如使用curl),然後挖掘響應。 – MattSmith

+0

這可以使用ScriptTagProxy解決嗎?如果是這樣,我可以讀/寫訪問JSON? – swudev

0

可能的解決方案:

  • 使用JSONP作爲per @floatless suggestion
  • 要求設備製造商添加Access-Control-Allow-Origin: *標頭(more about it at MDN)。
  • 在添加JSONP包裝或Access-Control-Allow-Origin標頭時向您的設備發出代理請求。
  • 最後一個是你可以馬上做。

    相關問題