2012-02-17 23 views
1

嘿,夥計們我在最後一個小時一直在努力解決這個問題,並且傾注了所有舊的線程解析出JSON,但遇到了兩個問題。首先是能夠使用此代碼迭代我的兩個對象。在JQuery和Ternary語句中迭代JSON循環

<script> 
    $.each(data, function(index, obj) { 
     $.each(obj, function(key, val) { 
      items.push((key == "key") 
      ? '<input type="checkbox" name="' + val + ' /> ' 
      : '<div id="' + key + '">' + key + ': ' + val + '</div>' 
     }); 
    }); 
</script> 

使用$.each(data[0 or 1], function(key, val)會讓我解析一個或另一個 部分雖然。

從PHP的輸出到目前爲止

[ 
    { 
     "key":"4", 
     "role":null, 
     "region":"", 
     "inspection_type":"melons", 
     "inspection_number":"123", 
     "customer_number":"", 
     "report_date":"0000-00-00", 
     "status":"0", 
     "order_date":"2012-02-17 13:59:18", 
     "customer":"", 
     "customer_division":"", 
     "location":"", 
     "memo":null, 
     "billing_key":null, 
     "shipper":"", 
     "po":"", 
     "commodity":"", 
     "label":"" 
    }, 

    { 
     "key":"2", 
     "role":null, 
     "region":"Seattle", 
     "inspection_type":"berries", 
     "inspection_number":"1023", 
     "customer_number":"206-420-9564", 
     "report_date":"2012-10-21", 
     "status":"1", 
     "order_date":"2012-02-17 12:24:11", 
     "customer":"Jd Daniel", 
     "customer_division":"The Moon", 
     "location":"West Seattle, WA", 
     "memo":null, 
     "billing_key":null, 
     "shipper":"Shipper1", 
     "po":"PO1", 
     "commodity":"Commodity1", 
     "label":"Label1" 
    } 
] 

而且將永遠是很好形成。

第二個問題是我的三元聲明。當再次使用$.each(data[0 or 1], function(key, val)時,至少會傳遞給我一個TRUE,但它不會輸出預期的<input>框,但是是True/False?我顯然在這裏犯了許多錯誤,有人能指出我的天真嗎?

編輯

重構的代碼,三元聲明解決

回答

0

.push()加括號內的一切陣列上一個新的指標:

items.push(key == "key") ? '<input type="checkbox" name="' + val + ' /> ' : ''; 

應該是:

items.push((key == "key") ? '<input type="checkbox" name="' + val + ' /> ' : ''); 

請注意,從if聲明中返回的內容未包含在括號內。由於圓括號內只有key == "key",因此只能將truefalse添加到數組中。

您的$.each()代碼遍歷PHP返回的對象數組,但key等於當前迭代的數組索引,而val是數組索引中的實際對象。要訪問val變量對象的屬性,你可以這樣做:

$.each(data, function(index, obj) { 
     items.push('<input type="checkbox" name="' + obj.key + ' />'); 
    }); 

每當我設置代碼從Web服務接收數據;我在回調的第一行做了一個console.log(data)以準確查看如何訪問我想要的每個屬性。

+0

試圖使用'obj.val'給我一個未定義並打破一切? – ehime 2012-02-17 23:20:37

+0

在你的代碼中,'$ .each(data,function(key,val){','key')是一個索引,從0開始,每次迭代增加1。 (你的PHP輸出中的那些),所以你可以像這樣訪問這些屬性:'val.key'(我知道這很奇怪,因爲你的其他變量被稱爲'key',但是這是從'你可以像下面這樣獲取'status':'val.status'。在我的例子中,我用'index'和'obj'替換了你的混淆變量名稱,因爲這些變量是一個索引和一個對象(分別) 。 – Jasper 2012-02-17 23:27:11

+0

我知道它obj.name是我的對象內的鍵的名稱,但爲了顯示所有的對象,必須有更好的方法來命名每個對象? – ehime 2012-02-17 23:28:56