2014-01-07 57 views
0

我使用

$.each(txt2,function(index,item){ 
$("#selectSection").append($("<option></option>").attr("value", item.sectionId).text(item.sectionText)); 

它的工作原理,如果我硬編碼以下JSON:

[{"sectionId":"1","sectionText":"Section One"},{"sectionId":"2","sectionText":"Section Two"},{"sectionId":"3","sectionText":"Section Three"},{"sectionId":"4","sectionText":"Section Four"},{"sectionId":"5","sectionText":"Hull"},{"sectionId":"6","sectionText":"Topside"}] 

然而,當PHP返回JSON包含如下所示的多數組名稱,這會破壞代碼。

{"sections":[{"sectionId":"1","sectionText":"Section One"},{"sectionId":"2","sectionText":"Section Two"},{"sectionId":"3","sectionText":"Section Three"},{"sectionId":"4","sectionText":"Section Four"},{"sectionId":"5","sectionText":"Hull"},{"sectionId":"6","sectionText":"Topside"}]} 

任何想法?

對於背景,以下是我正在使用的代碼。該代碼完全符合實際的ajax查詢結果註釋和json硬編碼。我只提供它的背景。

$.ajax({ 
url:"querySections3.php", 
datatype: "json", 
success:function(result){ 
    //txt1 = result; 
    txt2 = [{"sectionId":"1","sectionText":"Section One"},{"sectionId":"2","sectionText":"Section Two"},{"sectionId":"3","sectionText":"Section Three"},{"sectionId":"4","sectionText":"Section Four"},{"sectionId":"5","sectionText":"Hull"},{"sectionId":"6","sectionText":"Topside"}] 
//options = JSON.parse(txt1);   
    $.each(txt2,function(index,item){ 
    $("#selectSection").append($("<option></option>").attr("value", item.sectionId).text(item.sectionText)); 
    }); 

在此先感謝您的任何幫助。

+0

'$ .each'不處理JSON。因此,要弄清楚*實際數據是什麼*(例如,使用網絡瀏覽器調試器)以及爲什麼它「不起作用」。在這種情況下,它看起來像代碼只是*不*處理與「失敗的數據」有意義的數據。 – user2864740

+1

嘗試'result.sections'像'txt1 = result.sections'然後'$ .each(txt1,function(){})' –

+0

爲什麼PHP返回一個對象,如果你只是想要一個數組? – Barmar

回答

0

你就不能內陣列提領:

options = JSON.parse(txt1).sections; 
$.each(options,function(index,item){ 

你也改變在PHP端的數據結構。

0

您可以根據您需要的結構調整您的PHP JSON輸出,但如果它不可行,那麼您可以調整您的JavaScript代碼以迭代sections而不是根。另外,您不需要在JavaScript中解析JSON字符串。

$.ajax({ 
url:"querySections3.php", 
datatype: "json", 
success:function(result){ 
    txt1 = result; 
    $.each(txt1["sections"],function(index,item){ 
    $("#selectSection").append($("<option></option>").attr("value", item.sectionId).text(item.sectionText)); 
    });