2014-02-26 58 views
0

我覺得我錯過了一些完全簡單的東西。請幫忙!我第一次使用這個部分的jQuery ....在jQuery中獲取來自延遲調用的JSON數據

這是我的代碼。如何循環由do_it返回的每個元素?

function do_it(a){ 
    return $.getJSON('url', {mode: 'get_array', id: a}); // returns JSON object 
}; 

$.when.apply(do_it[1,2,3]).then (function(data){ 
    // how to get each element returned by do_it() here? 
}, function() {console.log('Failed');<br>}); 
+0

對不起,我的錯字。這就是我的代碼....修正了。 – user135650

+0

JSON的外觀如何? – Andy

+2

這裏有很多奇怪的事情發生。你能否用簡單的英文詳細描述你想要做什麼? –

回答

-1

假設返回值是一個數組:

$.when.apply(do_it[1,2,3]).then(function(data){ 
    $(JSON.parse.(data)).each(function(index, element){ 
    //do stuff 
    }); 
}, function() {console.log('Failed');<br>}); 

編輯:

從你的意見,讓我們假設:

var data = '[{"ID":1,"L_Name":"Jones","F_Name":"Jan","Email":"[email protected]","Telephone_No‌​":"xxx.xxx.xxxx","Institution":"IT","Department":"3","Notes":"","Secretary":0},{"I‌​D":3,"L_Name":"Smith","F_Name":"Christopher","Email":"[email protected]","Telephone‌​_No":"","Institution":"IT","Department":"18","Notes":"","Secretary":0},{"ID":4,"L_‌​Name":"White","F_Name":"Amanda","Email":"[email protected]","Telephone_No":"","Inst‌​itution":"UT","Department":"25","Notes":"","Secretary":0}]'; 

通知我增加了開閉括號用於數組和元素之間的逗號。

然後通過數組循環,你可以這樣做:

var json = JSON.parse(data); 
$(json).each(function(index,element){ 
    //do stuff 
    alert("index: " + index + " element: " + element); 
}); 
+0

我認爲在「解析」和開放式paren之間還有一個額外的點。但它不適用於我回來的陣列式JSON。 – user135650

+0

我認爲你的回覆格式不正確;在您提供的示例中,缺少開尾括號以及數組元素之間的逗號。 – goten

0

$.getJSON返回一個承諾對象:http://api.jquery.com/jquery.getjson/
有了這一點,你可以將donefailalways功能分別運行。使用它,你可以將代碼格式化爲。

function do_it (id) { 
    return $.getJSON(url, { 
     mode: 'get_array', 
     id: id 
    }); 
} 

do_it([1, 2, 3]).done(function (data) { 
    for (var key in data) { 
     console.log(key, " = ", data[key]); 
    } 
}).fail(function() { 
    console.log("Failed"); 
}); 

我不知道你打算傳遞給do_it如果是數組或每個id分別是什麼,如果是後者,你可以這樣做:

$.each([1, 2, 3], function (id) { 
    do_it(id) // same stuff as above 

編輯:基於您的意見,這裏是一個建議,雖然不是最好的表現建議。

var data = []; 

$.when.apply($.map([1,2,3], function (id) { 
    return do_it(id).done(function (d) { 
     data.push(d[0]); 
    }); 
}).done(function() { 
    for (var d in data) { 
     console.log(d); 
    } 
}).fail(function() { 
    console.log("Failed"); 
}); 
+0

問題是,儘管獲得了getJSON返回值,但「數據」中沒有任何內容出現,因此失敗。我向PHP程序發送一個數組並獲得JSON響應。當數組中有一個元素(和一個JSON對象)時,數據顯示出來,但是當我發送一個多元素數組後發回一個複雜的JSON對象時,數據就會顯示出來... – user135650

+0

您是否有現場演示,其中個人可以看到?什麼符合你作爲一個複雜的JSON對象。你確定id應該是一個數組而不僅僅是一個id(例如一個數組元素)。聽起來就是這樣。 – Ford

+0

對不起我的術語:我的意思是複雜的對象是一個編碼的關聯數組。 php爲每個id創建一個關聯數組,然後json_encodes整個數組並將其發回。當只有一個id時,在它被編碼之前,數組中只有一行(並且我通過data [0]得到它),當有更多行時,我無法得到它。所以看起來我不得不以不同的方式返回數據,或者找到另一種解析方式。 – user135650

0

在這個例子中,我固定在數據的任何錯誤,並使用了deferred對象複製你的程序的功能。

Fiddle

data是一個包含多個對象的數組。代碼遍歷數組對象並從每個對象中挑選出值以添加到表中。請注意,我傾向於使用array.join()而不是字符串連接來構建HTML - YMMV。

$.when(do_it()).then(function (data) { 
    var html = []; 
    html.push('<table>'); 
    for (var i = 0, l = data.length; i < l; i++) { 
     var row = []; 
     row.push('<tr>'); 
     row.push('<td>' + data[i].ID + '</td>'); 
     row.push('<td>' + data[i].L_Name + '</td>'); 
     row.push('<td>' + data[i].F_Name + '</td>'); 
     row.push('<td>' + data[i].Email + '</td>'); 
     row.push('<td>' + data[i].Department + '</td>'); 
     row.push('</tr>'); 
     html.push(row.join('')); 
    } 
    html.push('</table>'); 
}); 

我希望它對您有些用處。

+0

試過這個:data [i] .L_Name出現時未定義,data [i]也是如此。 – user135650

+0

'L_Name'是我必須在您發佈的JSON中修復的內容之一。這可能與該下劃線有關。你是否收到任何數據? – Andy

+0

我在第一個響應中列出了JSON對象(顯然有一些拼寫錯誤)。如果我只發送一個數組元素並取回一個簡單的JSON對象,我可以解析它,但是當我發送一個數組並返回一個複雜的JSON對象時,數據會出現undefined,無論我如何嘗試 - 我嘗試過! - 解析它... gaaah – user135650