2013-02-14 53 views
0

我有一個我正在開發的PhoneGap/jQuery Mobile應用程序。我在之前使用的腳本中收到了一些奇怪的結果。jQuery AJAX意外的`undefined`結果(有效的JSON)

[:

$.ajax({type: "GET", 
      url: "http://****.net/****/GetMembers.php", 
      data: {get_param: "Member"}, 
      dataType: "json", 
      success: function (data) { 
       $.each(data, function (index, element) { 
        $("#members-content").append("<li><a id='members-a-" + element.ID + "' data-id='" + element.ID + "' href='#member-details'><img src='" + element.ImgURL + "' /><h3>" + element.Name + "</h3></a></li>"); 
        $("#members-a-" + element.ID).bind('click', function() {Members.MemberID = $(this).attr('data-id'); MemberDetails.Load(); }); 
        $("#members-content").listview("refresh"); 
        }); 
      } 
    }); 

JSON從web服務返回{ 「會員」:{ 「ID」:1, 「名稱」: 「成員1」, 「imgUrl的」 日期null}},{」 Member「:{」ID「:2,」Name「:」Member 2「,」ImgURL「:null}},{」Member「:{」ID「:3,」Name「:」Member 3「,」ImgURL 「:空}},{」 會員 「:{」 ID 「:4,」 名稱 「:」 會員4" , 「imgUrl的」:空}}]

在我#members-content名單我正在undefined爲名稱元素<h3>

+0

開始之前在成功的功能循環,可使用這樣的:數據=數據[0],然後繼續循環。 – luckystars 2013-02-14 17:34:15

+0

它看起來像是element.Member.ID,element.Member.Name等。你有沒有嘗試過在Firebug或其他JavaScript調試器中解決這個問題,並看看你是否可以擺弄這個元素? – CodeChimp 2013-02-14 17:36:37

+0

data = data [0]意味着:data = {「Member」:{「ID」:1,「Name」:「Member 1」,「ImgURL」:null}},{「Member」:{「ID」 :2,「Name」:「Member 2」,「ImgURL」:null}},{「Member」:{「ID」:3,「Name」:「Member 3」,「ImgURL」:null}}, 「Member」:{「ID」:4,「Name」:「Member 4」,「ImgURL」:null}} – luckystars 2013-02-14 17:38:23

回答

2

你有一個雙嵌套對象。您應該使用

element.Member.ImgURL 

例如,看看json:

[ 
    { <--element in your .each() loop 
     "Member": { 
      "ID":1, 
      "Name":"Member 1", 
      "ImgURL":null 
     } 
    }, 
    { etc... 
+0

我認爲使用'data:{get_param:'Member'}'會使'Member'對象成爲根,因此只需要'element.ID'來獲取我的數據。所以這是一個不正確的假設,我應該深入研究成員對象。 – SnareChops 2013-02-15 17:54:02

+0

這隻適用於您發送給服務器的內容。我不知道這臺服務器是如何工作的,但事情通常不會以您發送它的相同格式返回。 – 2013-02-15 17:56:54

1

每個元素都有一個成員。所以:

element.ID 

應該是:

element.Member.ID 

同去imgUrl的和名稱

1

你有兩個選擇:find the two in fiddle here

無論是環通爲您正在做什麼,但有一個更改:

這必須是這樣的element.Member.Name

或遍歷它再次像這樣:

$.each(data, function (index, element) { 
    $.each(element, function (index, e) { 
    console.log(e.Name); // <----here you will get the correct response 
    }); 
});