在jQuery/javascript中处理JSONP数据



我有一个小脚本,它从服务器获取一些JSONP数据。我想访问该响应数据中的各种值。我不知道怎么做。

看完一些文章后,我感到困惑。我从这个网站上读到JSON.stringify()将创建JSON。所以在我的情况下,这意味着服务器没有返回JSON?

因为如果我做data= JSON.parse(response);alert()就不起作用。此外,如果我将dataType更改为json,我会从服务器收到一些身份验证错误。在所有这些之后,我终于想出了如何提醒服务器的响应。

jQuery代码:

getData = function(){
    var urlink = "https://192.168.150.3/loc/102?jsonpCallback=myCallback";
    $.ajax({
        type: "GET",
        url:  urlink,
        dataType:"jsonp",
        async: false,
    });
}
myCallback = function(response){
        data= JSON.stringify(response);
        alert(data);
        }

由于警报,我从上面的脚本中得到的输出如下:

  {
    "request":"/loc/102?jsonpCallback=myCallback&callback=jQuery21106404822329059243_1410515165630&_=1410515165633",
    "response":
      {
        "id":102,
        "name":"Location 1",
        "child":[
          "/child/CSJ01",
          "/child/CSJ02",
        ],
        "stats":{
          "pow":{
            "instant":8.39
          },
          "cTemp":{
            "instant":22.76
          },
          "rTemp":{
          },
          "b":{
            "instant":1
          },
          "m":{
            "instant":1410513940
          }
        }
      }
  }

问题:如何访问idnamechild的值,powinstant的值,以及cTempinstant的值等?

我已经找到了一些关于如何在JSON中获取这些值的解决方案,但它们对我不起作用。例如:这个例子。在大多数例子中,他们首先使用JSON.parse(),然后获得特定的值,但在我的例子中,JSON.parse()什么都不做,所以这些例子没有太大帮助,或者我可能非常困惑和迷失。如有任何建议,我们将不胜感激。

JSONP方法不是真正的ajax,因此不能设置withCredentials和自定义头。事实上,它创建了一个带有响应的script元素来处理CORS(因此,如果没有目标明确授权,你就不能向网站中的其他网站提出请求)

JSON请求将创建如下脚本:

<script src="https://192.168.150.3/loc/102?jsonpCallback=myCallback">
</script>

然后返回的数据将是:

myCallback({...});

取而代之的是:

{...}

因此,您可以设置自定义标头。

现在,如果您想要凭证和标头,只需使用json,但您的服务器必须正确处理CORS。

您的两次回调之间存在问题。您定义了一个,jquery定义了另一个(b/c jquery附加callback查询),因此新创建的script标记将只调用一个方法,从而success回调OR myCallback,但不能同时调用这两个所以试试这个:

getData = function(){
    var urlink = "https://192.168.150.3/loc/102";
    $.ajax({
        type: "GET",
        url:  urlink,
        dataType:"jsonp",
        async: false,
        success: function(data) {
            data = JSON.stringify(response);
            alert(data);
        }
    });
}

最新更新