【发布时间】: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 随机化了数组的索引.. 但我不确定.. 帮帮我......请指出我错在哪里。
【问题讨论】: