PHP数组到javascript转换改变索引值


PHP array to javascript conversion altering the index values

我有一个javascript函数,通过ajax从数据库获取用户信息。它有以下代码。

var temp_id = new Object;
function checkRequests() {
    $.ajax({
        url: "bin/inc/classes/mechanism_class.php",
        type: "POST",
        data: {'checkrequest': '1'},
        success: function(data1) {
            for(var i=0; i<jQuery.parseJSON(data1).length; i++) {
                $.ajax({
                    url:"bin/inc/classes/mechanism_class.php",
                    type: "POST",
                    data: {'checkrequest2': jQuery.parseJSON(data1)[i]},
                    success: function(data) {
                        requestPopper(data);
                    }
                }).error(function() {
                });
            }
        }
    }).error(function() {
    });
}
function requestPopper(data) {
    var id = jQuery.parseJSON(data)[0];
    var firstname = jQuery.parseJSON(data)[1];
    var lastname = jQuery.parseJSON(data)[2];
    var imagedir = jQuery.parseJSON(data)[3];
    var imageext = jQuery.parseJSON(data)[4];
    var imgsrc = 'uploads/'+imagedir+'/'+'thumbs/'+imagedir+'size2.'+imageext;
    if($('#'+'requests_content_'+id).length == 0) {
        if($('.requests_content').length == 0) {
            $('#requests').after('<div id="dropdown_1"><div class="requests_content" id="requests_content_'+id+'"><a href='+'profile.php?user='+id+'><img src='+imgsrc+' width="60" height="60" class="senders_image"></a><a id="senders_name" href='+'profile.php?user='+id+'>'+firstname + ' ' +lastname+'</a><div id="acceptbutton">Accept</div><div id="rejectbutton">Reject</div></div></div>');
            temp_id.id = id;
        } else {
            $('#'+'requests_content_'+temp_id.id).after('<div class="requests_content" id="requests_content_'+id+'"><a href='+'profile.php?user='+id+'><img src='+imgsrc+' width="60" height="60" class="senders_image"></a><a id="senders_name" href='+'profile.php?user='+id+'>'+firstname + ' ' +lastname+'</a><div id="acceptbutton">Accept</div><div id="rejectbutton">Reject</div></div>');
        }
    } 
}
此外,处理ajax请求的PHP类具有以下代码
class RequestsAndAlerts {
public function hasRequests() {
    if(isset($_POST['checkrequest'])) {
        $current_user =  $_SESSION['cred_regiden'];
        $query1 = "SELECT * FROM `requests` WHERE `ReqReceiver` = '$current_user'  ORDER BY `sentdatetime` DESC";
        $senders = array();
        if($query_run1 = mysql_query($query1)) {
            while($res = mysql_fetch_assoc($query_run1)) {
                $sender = $res['ReqSender'];
                array_push($senders, $sender);
            }
        }
        echo json_encode($senders);
    }
}
public function sendRequestInfo() {
    if(isset($_POST['checkrequest2'])) {
        $sender = $_POST['checkrequest2'];
        $current_user = $_SESSION['cred_regiden'];
        $info_request_senders = array();
        $query1 = "SELECT * FROM `user_credentials` WHERE `cred_regiden` = '$sender'";
        $query2 = "SELECT * FROM `prof_image` WHERE `cred_regiden` = '$sender'";
        if($query_run1 = mysql_query($query1)) {
            while($res = mysql_fetch_assoc($query_run1)) {
                $info1 = $res['cred_regiden'];
                $info2 = $res['cred_fname'];
                $info3 = $res['cred_lname'];
                array_push($info_request_senders, $info1);
                array_push($info_request_senders, $info2);
                array_push($info_request_senders, $info3);
            }
        }
        if($query_run2 = mysql_query($query2)) {
            while($res2 = mysql_fetch_assoc($query_run2)) {
                $info4 = $res2['image_dir'];
                $info5 = $res2['image_extension'];
                array_push($info_request_senders, $info4);
                array_push($info_request_senders, $info5);
            }
        }
        echo json_encode($info_request_senders);
    }
}
$RAA = new RequestsAndAlerts;
$RAA->hasRequests();
$RAA->sendRequestInfo();

现在,我想提取向当前用户发送好友请求的人的数据。为了测试目的,我从user2和user3发送了user1两个朋友请求,并从user1帐户登录,当我按下请求按钮时,首先单击user1的信息div位于顶部,user2的信息div位于底部。这里很好…但当我再次点击时,它们交换了位置…但它们的动作是不规则的。我不希望这种事发生。我希望user1始终位于顶部,user2位于底部,根据谁的请求首先发送。但是我在mysql中这样做了。我在mysql中按DESC顺序排列请求。它应该将div安排为"user1在上"answers"user2在下"。但这是随机发生的。

我猜这是由于json_encode随机化数组的索引。但是我不确定……帮帮我,伙计们……请指出我错在哪里

问题在于您的多个ajax调用。

注意ajax是异步HTTP请求

例如,您有user1和user2,在For循环中,第一个ajax调用将被初始化以获取user1的详细信息,因此ajax是异步的,它不会等待该请求。它将立即发送ajax请求以获取user2结果。如果请求2在请求1 .之前完成,那么您将得到上述错误。


解决方案:
1. 在第一个ajax调用本身中获取用户详细信息。

2 .将第二个ajax调用作为同步调用。