javascript - 结果按第一个 ajax 的顺序排列,但在 for 循环内部顺序随机改变。为什么?

标签 javascript jquery ajax

这对我来说真的很奇怪。我无法理解为什么会发生这种情况,我希望有人能解释一下。

好的,我正在运行一个 ajax 调用,其中我调用 [data] 并通过 for 循环运行它,在该循环中我获取所有数据库值,然后我运行另一个 ajax 调用来检查我得到的其他条件其他值(value)。一切都按照我的意愿进行得很好。问题是我在第二个 ajax 成功后获取值的顺序是随机的。这是完全无法理解的。

在我的第一次 ajax 调用中,我得到了正确顺序的结果,即 DESC 顺序。

请解释一下原因。

function get_filter_data(val) {
            $.ajax({
                type: "POST",
                url: "filter_data.php",
                dataType: 'json',
                data:'rating='+val,
                success: function(data){

                    var str = '';
                    var cide = $('#cSessionid').val();
                    //console.log(cide+'-session-id');

                    for(var i in data)
                    {
                        var ide = data[i].id;
                        var username = data[i].username;
                        var u_name = username.toLowerCase().replace(/\b[a-z]/g, function(letter) {
                            return letter.toUpperCase();
                        });
                        var email = data[i].email;
                        var ref_number = data[i].ref_number;
                        var rating = data[i].rating;
                        var title = data[i].review_title;
                        var desc = data[i].review_desc;
                        var pubdate = data[i].pubdate;


                        //console.log(data[i].id+'-first-id');
                         $.ajax({
                            type: "POST",
                            url: "add_edit_delete.php",
                            dataType: 'json',
                            cache: false,
                             data: {
                                username: username,
                                u_name: u_name,
                                email: email,
                                ref_number : ref_number,
                                rating : rating,
                                title : title,
                                desc : desc,
                                pubdate : pubdate,
                                ppid : ide
                                 },
                            success: function(data){

                                var eip = data.ipadt;

                                 if(eip === cide){ 

                            var ddc = '<div class="editndeletebox"><a href="#" class="editreviewn"><span>Edit</span></a><a class="deletereviewn" href="#"><span>Delete</span></a></div>';

                         }else{

                            var ddc = '<span></span>';
                         }

                        str += '<div class="review pageable-item-js item clearfix" data-reviewmid="57c5e5e20000ff000981e1be">';
                        str +=      '<div class="user-info clearfix">';
                        str +=          '<div class="user-review-name clearfix"><a class="user-review-name-link" rel="nofollow" title="go to ' + data.u_name +  ' profile" href="../users/users.php?review='+data.pid+'">';
                        str +=             data.u_name;  
                        str +=          '</a></div>';
                        str +=          '<div class="clearfix">1 review </div>';
                        str +=     '</div>';
                        str +=      '<div class="review-info clearfix">';
                        str +=      '<input type="hidden" id="dneid" value="'+data.pid+'" />';
                        str +=          ddc;
                        str +=          '<div  class="star-rating count-'+data.rating+' size-medium clearfix">';
                        str +=              '<div class="star-1"><img src="../community/shared/sprite_star.png" class="star-image" alt=""></div>';
                        str +=              '<div class="star-2"><img src="../community/shared/sprite_star.png" class="star-image" alt=""></div>';
                        str +=              '<div class="star-3"><img src="../community/shared/sprite_star.png" class="star-image" alt=""></div>';
                        str +=              '<div class="star-4"><img src="../community/shared/sprite_star.png" class="star-image" alt=""></div>';
                        str +=              '<div class="star-5"><img src="../community/shared/sprite_star.png" class="star-image" alt=""></div>';
                        str +=          '</div>';


                        var publish_date = $.timeago(data.pubdate); 
                        var publish_date = $.trim(publish_date); 


                        //  Published    Wednesday, October 24, 2012    

                        if(publish_date != "false") {
                            show_date = publish_date;
                        } 
                        else {

                            var dayNames = [
                              "Sunday", "Monday", "Tuesday",
                              "Wednesday", "Thursday", "Friday", "Saterday"
                            ];

                            var monthNames = [
                              "January", "February", "March",
                              "April", "May", "June", "July",
                              "August", "September", "October",
                              "November", "December"
                            ];

                            var date = new Date(data.pubdate);
                            var day = date.getDate();
                            var monthIndex = date.getMonth();
                            var year = date.getFullYear();
                            var dayIndex = date.getDay();

                            var show_date = 'Published    ' + dayNames[dayIndex] + ', ' + monthNames[monthIndex] + ' ' + day + ', ' + year;
                        }


                        str +=      '<time datetime="'+data.pubdate+'" class="ndate timeago" title="'+data.pubdate+'" >'; 
                        str +=       show_date +    '<span title=""></span>';
                        str +=      '</time>';  

                        if (data.ref_number == 11) {
                            str +=  '<div class="hover_tip"><div class="review-verified"><div class="review-verified-tooltip-text-hidden">'+ data.u_name +' was invited to write this review by The Logo Company. <a href="https://support.trustpilot.com/hc/articles/201819697-?utm_medium=consumer&utm_source=verified_order_learn_more&utm_campaign=consumer_verified_order" rel="nofollow" class="review-verified-tooltip-link">Learn more</a>.</div><span class="icon icon-ok-sign"></span> Verified order<div class="review-verified-tooltip-container" style="width: 421px;"><p class="review-verified-tooltip-text">'+data.u_name+' was invited to write this review by The Logo Company. <a href="https://support.trustpilot.com/hc/articles/201819697-?utm_medium=consumer&utm_source=verified_order_learn_more&utm_campaign=consumer_verified_order" rel="nofollow" class="review-verified-tooltip-link">Learn more</a>.</p></div></div></div>';
                        }
                        else {

                            str +=  '<div class="hover_tip"><div class="review-verified"><div class="review-verified-tooltip-text-hidden">Thelogocompany.net were not able to verify which order correlates to this review. <a href="https://support.trustpilot.com/hc/articles/201819697-?utm_medium=consumer&utm_source=verified_order_learn_more&utm_campaign=consumer_verified_order" rel="nofollow" class="review-verified-tooltip-link">Learn more</a>.</div><span class="icon icon-ok-sign"></span> Unverified order<div class="review-verified-tooltip-container" style="width: 421px;"><p class="review-verified-tooltip-text">Thelogocompany.net were not able to verify which order correlates to this review. <a href="https://support.trustpilot.com/hc/articles/201819697-?utm_medium=consumer&utm_source=verified_order_learn_more&utm_campaign=consumer_verified_order" rel="nofollow" class="review-verified-tooltip-link">Learn more</a>.</p></div></div></div>';
                        }
                        //<span class="icon icon-ok-sign"></span>





                        str +=      '<h3 class="review-title en h4">';
                        str +=          '<a class="review-title-link" rel="nofollow" href="../reviews/reviews.php?review='+data.pid+'">';
                        str +=          data.title;                                     
                        str +=          '</a></h3><div class="review-body">';
                        str +=      data.desc;
                        str +=      '</div>';
                        str +=          '<div class="review-actions clearfix"><div class="btn-action clearfix "><div class="icon icon-thumbs-up circle-action blue-action" id="pressme_'+data.pid+'" onclick="funn('+data.pid+')"; title="Find useful" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></div><div class="number-box" id="box_'+data.pid+'" style="display:none"><div class="text useful-counter-js" id="val_'+data.pid+'"></div></div></div><div class="btn-action clearfix" ><div class="icon icon-report circle-action notify" id='+data.pid+' title="Notify Compliance" onclick="fun('+data.pid+');"><i class="fa fa-flag" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-facebook circle circle-action social-share-facebook-js" title="Share on Facebook"><i class="fa fa-facebook" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-google circle circle-action social-share-google-js" title="Share on Google+"><i class="fa fa-google-plus-official" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-status="DanielleB gave The Logo Company 5 stars via @TrustpilotUS [Link]" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-twitter circle circle-action social-share-twitter-js" title="Share on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i></div></div><div class="review-action-response" ><ul class="reporting hide" id="report_'+data.pid+'" style="display: none;"><li class="first">Dear Guest. You just clicked on Notify Compliance because you believe that this review is violating Trustpilot’s <a href="#" class="review-guidelines" data-url="http://legal.trustpilot.com/user-guidelines">User Guidelines</a>.<br><br><i>If you are a business user and you wish to report a review on your company profile, please do so on your <a href="https://en-us.b2b.trustpilot.com/Login?goto=http%3a%2f%2fen-us.b2b.trustpilot.com%2fng%2fdashboard" target="_blank" rel="nofollow">business account</a>. Don’t have an account? It’s free and easy to <a href="http://business.trustpilot.com/signup" rel="nofollow" target="_blank">sign up</a>.</i></li><li><label for="message">Please provide us with as much information as possible in the text field provided below (min. 50 characters).</label><div class="alert alert-warning hidden">Please use a minimum of 50 characters.</div><textarea name="message" id="message" class="form-control message" placeholder="Describe why you believe this review requires our Compliance Team’s attention. Does it contain e.g. defamatory statements, coarse language, or does it seem fake?"></textarea><a href="https://www.trustpilot.com/users/connect?signup=True"><input type="submit" value="Submit notification to Compliance" class="btn btn-primary btn-block btn-lg buttonsubmit-js"></a></li></ul><div class="find-useful hidden"></div></div></div></div></div>';
                        //str +=        '<div class="review-actions clearfix"><div class="btn-action clearfix "><div class="icon icon-thumbs-up circle-action blue-action" id="pressme_'+id+'" onclick="funn('+id+')"; title="Find useful" ><i class="fa fa-thumbs-up" aria-hidden="true"></i></div><div class="number-box" id="box_'+id+'" style="display:none"><div class="text useful-counter-js" id="val_'+id+'"></div></div></div><div class="btn-action clearfix" ><div class="icon icon-report circle-action notify" id='+id+' title="Notify Compliance" onclick="fun('+id+');"><i class="fa fa-flag" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-facebook circle circle-action social-share-facebook-js" title="Share on Facebook"><i class="fa fa-facebook" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-google circle circle-action social-share-google-js" title="Share on Google+"><i class="fa fa-google-plus-official" aria-hidden="true"></i></div></div><div class="btn-action clearfix" data-social-share-url="https://www.trustpilot.com/reviews/57c5e5e20000ff000981e1be" data-status="DanielleB gave The Logo Company 5 stars via @TrustpilotUS [Link]" data-event-source="CompanyProfile" data-shared-object="SellerReview"><div class="icon icon-twitter circle circle-action social-share-twitter-js" title="Share on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i></div></div><div class="review-action-response" ><ul class="reporting hide" id="report_'+id+'" style="display: none;"><li class="first">Dear Guest./*'+username+'*/ You just clicked on Notify Compliance because you believe that this review is violating Trustpilot’s <a href="#" class="review-guidelines" data-url="http://legal.trustpilot.com/user-guidelines">User Guidelines</a>.<br><br><i>If you are a business user and you wish to report a review on your company profile, please do so on your <a href="https://en-us.b2b.trustpilot.com/Login?goto=http%3a%2f%2fen-us.b2b.trustpilot.com%2fng%2fdashboard" target="_blank" rel="nofollow">business account</a>. Don’t have an account? It’s free and easy to <a href="http://business.trustpilot.com/signup" rel="nofollow" target="_blank">sign up</a>.</i></li><li><label for="message">Please provide us with as much information as possible in the text field provided below (min. 50 characters).</label><div class="alert alert-warning hidden">Please use a minimum of 50 characters.</div><textarea name="message" id="message" class="form-control message" placeholder="Describe why you believe this review requires our Compliance Team’s attention. Does it contain e.g. defamatory statements, coarse language, or does it seem fake?"></textarea><a href="https://www.trustpilot.com/users/connect?signup=True"><input type="submit" value="Submit notification to Compliance" class="btn btn-primary btn-block btn-lg buttonsubmit-js"></a></li></ul><div class="find-useful hidden"></div></div></div></div></div>';

                        $(".reviews_container").html(str); 



                            },
                            error: function(request, status, error) {
                                 console.log(error);
                              } 

                        });//inner ajax ends




                    }

                }
            });



        }

最佳答案

您的第二轮 ajax 调用是异步完成的,因此一旦返回结果它们就会显示。您实际上是在一个接一个地触发所有 ajax 调用,而不等待任何结果,并在服务器应答时显示结果。

关于javascript - 结果按第一个 ajax 的顺序排列,但在 for 循环内部顺序随机改变。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880347/

相关文章:

javascript - 如何将 php 调用移动到另一个 div 并使其仍然有效

javascript - 根据 AJAX 请求向行添加表类/删除表类

javascript - 在谷歌地图 API javascript 中从 map (使用绘图管理器)获取所有折线

asp.net - 在 jQuery UI 模态消息中显示 ASP.NET 验证摘要

javascript - jquery href 与 handlebars 链接冲突

javascript - 在 IE 8+ 中运行时检测 IE 7 Emulate

javascript - 获取除 first 和 last 之外的所有数组元素

javascript - Knockoutjs 与mapping.fromJS 和模板

javascript - 为什么在我的 AJAX 调用中,response.chartAt(0) 返回未定义?

ajax - 如何将 url 重定向到另一个