【问题标题】:PHP array to javascript conversion altering the index valuesPHP数组到javascript转换改变索引值
【发布时间】:2014-05-19 15:39:25
【问题描述】:

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

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

现在,我想提取向当前用户发送好友请求的人的数据。出于测试目的,我向 user1 发送了来自 user2 和 user3 的两个好友请求,并从 user1 帐户登录,当我按下请求按钮时,第一次点击 user1 的信息 div 位于顶部,而 user2 的信息 div 位于底部。这很好到这里..但是当我再次点击时,他们交换位置..但他们以不规则的方式进行。我不希望这种情况发生。我希望 user1 始终位于顶部,而 user2 根据首先发送的请求位于他的底部。但是我是在 mysql 中这样做的。我在 mysql 中按 DESC 顺序排列了请求。它应该将 div 排列为“user1 在顶部”和“user2 在底部”。但是这是随机发生的。

我猜这是因为 json_encode 随机化了数组的索引.. 但我不确定.. 帮帮我......请指出我错在哪里。

【问题讨论】:

    标签: php jquery mysql


    【解决方案1】:

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

    注意ajax是异步HTTP请求

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


    解决方案:
    1.在第一个ajax调用本身中获取用户详细信息。
    或者
    2 .将第二个ajax调用作为同步调用。

    我选择第一个选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 2021-11-05
      • 1970-01-01
      • 2011-08-05
      • 2017-06-09
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多