2012-08-11 31 views
0

在這段代碼中,我將數據發送與順序1,2,3,4,5 ...但是當它增加了該數據的數據庫說到像1,4,5,3,2或別的東西。的JQuery的getJSON在另一種秩序工作,爲什麼?

for(var i = 1; i<=childs;i++){ 
     var u = $('#name'+i).val(); 
     var inf = $('#info'+i).val(); 
     var l = $('#location'+i).val(); 
     var b = $('#birth'+i).val(); 
     var d = $('#death'+i).val(); 
     var formData = "mode=add&number="+i+"&to="+t; 

     if(u.length > 0){ 
      formData += "&username="+u; 
     }else if(inf.length > 0){ 
      formData += "&info="+inf; 
     }else if(l.length > 0){ 
      formData += "&location="+l; 
     }else if(b.length > 0){ 
      formData += "&birth"+b; 
     }else if(d.length > 0){ 
      formData += "&death"+d; 
     } 

     $.getJSON("content/child.php", formData, function(json){ 
      $.each(json, function(key, value){ 
      console.log(value); // in div i wrote ar1, ar2, ar3, ar4, ar5... but in database it addess how he wants ar1, ar3, ar4, ar5, ar2 let's say 
        }); 
     }); 
    } 
}); 

回答

0

正如您發現的那樣,JSON對象是無序的鍵值對集。如果你需要維持秩序,然後使用鍵值對的數組。

0

看來你for循環執行速度比$.getJSON功能,它會導致意想不到的結果。

你可以嘗試$.when()效用函數,請嘗試以下操作:

提供一種方法來執行基於一個或多個對象,代表異步事件通常遞延對象的回調函數。

var i = 0; 
var len = childs; 

function register() { 
    i++; 
    var u = $('#name'+i).val(); 
    var inf = $('#info'+i).val(); 
    var l = $('#location'+i).val(); 
    var b = $('#birth'+i).val(); 
    var d = $('#death'+i).val(); 
    var formData = "mode=add&number="+i+"&to="+t; 

    if (u.length > 0){ 
    formData += "&username="+u; 
    } else if(inf.length > 0){ 
    formData += "&info="+inf; 
    } else if(l.length > 0){ 
    formData += "&location="+l; 
    } else if(b.length > 0){ 
    formData += "&birth"+b; 
    } else if(d.length > 0){ 
    formData += "&death"+d; 
    } 

    $.when($.getJSON("content/child.php", formData)).then(function(){ 
    if (i < len) { 
     register() 
    } 
    }) 
} 
+0

是的,我想是的,但如何解決它?我試過的setTimeout,由其他功能,但結果是一樣的.... – user1592473 2012-08-11 18:03:02

+0

@ user1592473嘗試更新的答案。 – undefined 2012-08-11 18:35:15

0

在jQuery 1.5推遲對象:

這可能是有益的

var result = []; 
var xhr = []; 

for (var i = 1; i <= childs; i++) { 
    var u = $('#name' + i).val(); 
    var inf = $('#info' + i).val(); 
    var l = $('#location' + i).val(); 
    var b = $('#birth' + i).val(); 
    var d = $('#death' + i).val(); 
    var formData = "mode=add&number=" + i + "&to=" + t; 

    if (u.length > 0) { 
     formData += "&username=" + u; 
    } else if (inf.length > 0) { 
     formData += "&info=" + inf; 
    } else if (l.length > 0) { 
     formData += "&location=" + l; 
    } else if (b.length > 0) { 
     formData += "&birth" + b; 
    } else if (d.length > 0) { 
     formData += "&death" + d; 
    } 

    xhr.push($.getJSON("content/child.php", formData, function(json) { 
     result.push(json); 
    })); 
} 

$.when.apply($, xhr).done(function() { 
    console.log(result); 
}); 
+0

它並沒有幫助,結果是一樣的... – user1592473 2012-08-12 16:27:16

0

這個作品! ;)感謝大家! =)

function register(i, len, to) { 
     var u = $('#name'+i).val(); 
     var inf = $('#info'+i).val(); 
     var l = $('#location'+i).val(); 
     var b = $('#birth'+i).val(); 
     var d = $('#death'+i).val(); 
     var formData = "mode=add&number="+i+"&to="+to; 

     if (u.length > 0){ 
     formData += "&username="+u; 
     } else if(inf.length > 0){ 
     formData += "&info="+inf; 
     } else if(l.length > 0){ 
     formData += "&location="+l; 
     } else if(b.length > 0){ 
     formData += "&birth"+b; 
     } else if(d.length > 0){ 
     formData += "&death"+d; 
     } 

     $.when($.getJSON("content/child.php", formData)).then(function(json){ 
     $.each(json, function(key, value){ 
      if(i == len){ 
       $('#mask').remove(); 
      } 
     }); 
     if (i < len) { 
      i += 1; 
      register(i, len, to) 
     } 
     }) 
    } 
    $('.childAdd').live('click', function(){ 
    var childs = eval($('#childs').attr('count')); 
    var to = eval($('#childs').attr('to')); 

    var i = 1; 
    var len = childs; 

    register(i, len, to); 
     }); 
相關問題