使用jQuery通过IP/device.JSON从本地网络上的硬件获取JSON

使用jQuery通过IP/device.JSON从本地网络上的硬件获取JSON,jquery,json,Jquery,Json,我在从本地网络上的硬件获取json时遇到问题 我可以在浏览器中使用此地址查看json代码: 我还将生成的文本保存到文件device.json中,并将其放置在与test.php文件相同的目录中 此代码适用于: $.getJSON('device.json',function(data) { $.each(data.mainunit.sensors, function(i, sensor) { $("#results").append('<p>'+s

我在从本地网络上的硬件获取json时遇到问题

我可以在浏览器中使用此地址查看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>');

        });
$.getJSON('device.json',函数(数据){
$。每个(data.mainunit.sensors,功能(i,传感器){
$(“#结果”).append(“”+sensor.name+”=“+sensor.tc+”

”); });
这不起作用:(将device.json更改为)

$.getJSON('http://192.168.1.103/device.json,函数(数据){
$。每个(data.mainunit.sensors,功能(i,传感器){
$(“#结果”).append(“”+sensor.name+”=“+sensor.tc+”

”); });
我猜代码无法在IP地址查看JSON文件


提前感谢。

可能违反了同一原产地政策:

由于浏览器的安全限制,大多数“Ajax”请求都遵循同一源策略;该请求无法成功地从不同的域、子域或协议检索数据


在本页的“附加说明”下:

您应该使用一些回调函数包装JSON。如果您的
设备.JSON
如下所示:

{ "a" : true, "b" : false }
将其修改为兼容:

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
  }
}
未测试代码。

可能的解决方案:

  • 将JSONP用作
  • 请设备制造商添加
    访问控制允许来源:
    标题()
  • 添加JSONP包装或Access Control Allow Origin标头时对设备的代理请求

  • 最后一个问题是,你可以马上做。

    这东西怎么会在无声中失败,真是令人恼火。Firebug有一个“Net”选项卡,可以显示ajax请求的http头和响应,这可能会给你一些线索。你可以通过web服务器代理请求,或者使用mod_proxy,或者如果请求量很小(我怀疑是这样的话)您可以编写一个服务器端脚本来接收json请求,点击设备(例如使用curl)然后通过管道输出响应。这可以通过ScriptTagProxy解决吗?如果可以,我是否有JSON的读/写权限?谢谢,我必须联系设备制造商,看看他们是否可以添加。谢谢。制造商正在发布一个补丁来提供JSONP。感谢请求示例。
    $.ajax({
      url: "http://192.168.1.103/device.json",
      type: "GET",
      dataType: "jsonp",
      jsonpCallback: "my_wrapper",
      success: function(data) {
         //Handle data
      }
    }