2012-08-13 91 views
0

我想知道我怎麼能正確地從下面的JSON返回數據獲取JSON:假裝我有一個網址http://test.com/tesdata使我有以下數據:如何從一個陣列

[{"Identifier":1, "Name":"Test"}, 
{"Identifier":2, "Name":"Test"}, 
{"Identifier":3, "Name":"Test"}] 

所以我做了按照一個div來獲得這樣的數據:

   $.ajax({ 
    type: 'GET', 
    url: 'http://notgiven', 
    data: { get_param: 'value' }, 
    dataType: 'json', 
    success: function (data) { 
     alert("s"); 
     $.each(data, function(index, element) { 
      $('.result').append("a"); 
     }); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
     alert("jqXHR: " + JSON.stringify(jqXHR)); 
     alert("textStatus: " + JSON.stringify(textStatus)); 
     alert("errorThrown: " + JSON.stringify(errorThrown)); 
    } 
}); 

,我得到以下錯誤無法解析JSON字符串

+0

你有多遠?錯誤發生在哪裏? – 2012-08-13 12:04:53

+1

測試:'element.Identifier +''+ element.Name' – 2012-08-13 12:05:53

+1

數組中有一個額外的'}'。 – undefined 2012-08-13 12:06:45

回答

-1

您需要的JSON數據的任何操作與之前調用JSON.parse功能JS。

$.ajax({ 
     type: 'GET', 
     url: 'http://test.com/tesdata', 
     data: { get_param: 'value' }, 
     dataType: 'json', 
     success: function (data) { 
      var items = JSON.parse(data); 
      $.each(items, function(index, element) { 
       $('.result').append(element.Id + " " + element.Name); 
      }); 
     } 
     }); 

對於IE 6和7,您必須包含用於支持JSON.parse函數的json2.js文件。

+1

'dataType'顯式指定jQuery在將響應傳遞給您之前應將響應解析爲JSON。此外,jQuery有'$ .parseJSON',所以不需要json2.js – Esailija 2012-08-13 12:52:49

1

試試這個:

// create empty object 
var json = {}; 

$.each(data, function(index, element) { 
// for each element, create empty object 
json[index] = {}; 
// map response data to new json object 
json[index]['id'] = element.Identifier; 
json[index]['name'] = element.Name; 
}); 

json變量現在包含JSON格式存儲方便的JavaScript對象:)所有信息

enter image description here

在您的例子,這將意味着:

$.ajax({ 
    type: 'GET', 
    url: 'http://test.com/tesdata', 
    data: { get_param: 'value' }, 
    dataType: 'json', 
    success: function (data) { 

     var json = {}; 

     $.each(data, function(index, element) { 
     json[index] = {}; 
     json[index]['id'] = element.Identifier; 
     json[index]['name'] = element.Name; 
     // don't know exactly what you try to do here, but let's append this data to '.result' 
     $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

     }); 

    } 
}); 

請注意,如果你想要的是將這些值附加到某個div,則不需要執行整個json轉換。在這種情況下,你可以做

success: function (data) { 
       $.each(data, function(index, element) { 
       $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

    }); 

}

+0

在哪裏插入url ..? – bdz 2012-08-13 14:52:16

+0

好吧,看編輯.... – tmaximini 2012-08-13 15:12:09

+0

thnx,但不起作用,看到我編輯它的問題.. – bdz 2012-08-13 15:23:42

0

正如我在評論這可能是一個跨域問題建議。不能從不同來源意思相同的協議(HTTP/HTTPS)相同的域(mydomain.com)相同的端口(通常省略默認爲:80)訪問數據/腳本

So origin of: http://localhost:8080/data != https://localhost:8080/data 
    origin of: http://mydomain.org/data != http://localhost/data 
    origin of: http://mydomain.org/data != http://localhost/data 
    origin of: http://localhost/data  == http://local 

主機/ somethingelse

仍然我不是100%確定。但解決問題的第一步是正確調試

這是可能的debug using xcode 但如果你想嘗試沒有。定義一個錯誤處理程序。 (check this fiddle

由於交叉來源問題,您會看到它不起作用。 (和它的一個虛擬網址)可悲的是,你無法捕獲這些交叉原點錯誤。你只能在控制檯看到他們..(至少我還沒有能力)

但現在好消息!

PhoneGap應用程序不僅限於交叉來源政策!所以如果部署了這個問題應該解決。

如果您有權訪問後端,我也有一個簡單的解決方法。您應該將Access-Control-Allow-Origin: *標頭設置爲enable CORS(跨源來源資源共享)

注意:對於開發,這不應該是一個問題,對於生產我建議設置一個固定的URL或者如果不需要刪除它。

編輯: 所以這不是一個交叉來源問題。作爲錯誤SAIS:無法解析JSON字符串

所以你檢查jqXHR響應內部是什麼。查看原始數據verify if it's valid。 95%的機會並不是因爲我最好的選擇是jQuery json解析器,它非常穩定。