簡體   English   中英

在jQuery / javascript中處理JSONP數據

[英]Handling JSONP data in jQuery/javascript

我有一個小的腳本,可以從服務器獲取一些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 ,價值instantpow ,價值instantcTemp等?

我找到了一些有關如何在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。

在您的2個回調之間存在問題 您定義一個,而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);
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM