2015-10-16 58 views
1

我目前有一個ajax調用發送數據到控制器和檢索json數據回來。更有效的方法來檢查json對象的內容並應用jquery

回來的值這個樣子

{ 
    "old": "The Old Password field is required.", 
    "new": "The New Password field is required.", 
    "new_confirm": "The Confirm New Password field is required." 
} 

現在,如果任何一個JSON字符串是空的,我想隱藏警告。

到目前爲止,我有以下的,但我想知道是否有更好的方法來遍歷數據與創建多發的if/else statments

$(document).ready(function() { 
    $('#changepassword').click(function() { // form submit button 
     $.ajax({ 
      url: "auth/change_password", // php controller 
      async: false, 
      type: "POST", 
      data: $("#change_password_form").serialize(), //pass all form data 
      dataType:"json", 
      success: function(data) { 
       if (data.old == "") { 
        $("#old").hide(); // hide old password alert div 
       } 
       else { 
        $("#old").show(); // show warning div 
        $("#old").empty(); // empty previous warning contents 
        $("#old").append(data.old); // append json string 
       }; 
       //$('#ajax-content-container').html(data); 
      } 
     }) 
    }); 
}) 
+0

沒有理由使用'異步:假,'反正,僅供參考,不贊成這種方式 –

+0

是嗎?現在什麼是正確的方式? – rob

回答

3

所以你基本上是想要做的都是一樣的3個屬性?然後,只需使用for ... in循環。

for(var prop in data){ 
    if(data[prop] == ""){ 
     $("#" + prop).hide(); 
    }else{ 
     $("#" + prop).show(); 
     $("#" + prop).empty(); 
     $("#" + prop).append(data[prop]); 
}; 
+0

'else'語句甚至可以簡化爲:'$(「#」+ prop).html(data [prop])。show();' –

+0

true'更好 – Danmoreng

0

如果所有屬性匹配相應的DOM元素的ID,您就可以使用一個for..in循環:

for(var prop in data) 
{ 
    var element = $('#' + prop); 

    if(obj[prop]){ 
     // There is error message -> Show it 
     element.text(data[prop]).show(); 
    } else { 
     // There isn't error message -> Hide it 
     element.hide();    
    } 
} 
相關問題