【问题标题】:JQuery getJSON work in another order, why?JQuery getJSON 以另一个顺序工作,为什么?
【发布时间】:2012-08-13 00:50:28
【问题描述】:

在这段代码中,我以 1、2、3、4、5 的顺序发送数据......但是当它将此数据添加到数据库时,它会像 1、4、5、3、2 或其他一样。

  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
                  });
        });
    }
});

【问题讨论】:

    标签: php jquery getjson


    【解决方案1】:

    如您所见,JSON 对象是一组无序的键值对。如果您需要保持顺序,请使用键值对数组。

    【讨论】:

      【解决方案2】:

      您的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()
           }
        })
      }
      

      【讨论】:

      • 是的,我想是的,但是如何解决呢?我试过setTimeout,做了另一个函数,但结果是一样的......
      【解决方案3】:

      从 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);
      });
      

      【讨论】:

        【解决方案4】:

        这行得通!!! ;) 谢谢大家! =)

           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);
                });
        

        【讨论】:

          猜你喜欢
          • 2016-10-04
          • 1970-01-01
          • 1970-01-01
          • 2012-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多