jQuery和Ajax返回不同的数据集而不是创建单独的ajax调用

时间:2015-09-22 15:55:14

标签: php jquery json ajax

我有以下jQuery setInterval函数,使用php文件中的ajax以30秒的间隔重新加载数据。我正在运行3个不同的ajax调用以获取3位信息。有没有办法将3个单独的ajax呼叫合并为一个呼叫?其中2个调用的php文件返回会话中的json数据,另一个调用只返回一个数字来显示未读消息的数量。

这是我目前拥有的jQuery代码:

setInterval(function(){


jQuery.ajax({ url: '/ajax-msgs.php?check=1', type: 'POST', dataType: 'json', cache: 'false', success: function(data) {
    var msghtml = '';
        jQuery.each(data, function() {
            msghtml += '<li><a href="message.php?id=' + this.msg_id + '">' + this.msg_subject + '</a></li>';
        });
        jQuery("#msg-menu").html(msghtml);
    }
});



jQuery.ajax({ url: '/ajax-msgs.php?check=2', type: 'POST', dataType: 'json', cache: 'false', success: function(data) {
        jQuery.each(data, function() {
            jQuery.jGrowl(this.msg_title, { life: 12000});
        });
        }
    });



    jQuery.ajax({ url: '/ajax-msgs.php?check=3', type: 'POST', dataType: 'json', cache: 'false', success: function(data) {
            jQuery("#msg-count").text('87');
        }
    });


}, 30000);

以下是php文件的作用:

if ($_GET['check']==1){

iMapFunction();
print_r(json_encode($_SESSION['message_overviews']));

} elseif ($_GET['check']==2){

iMapFunction();
print_r(json_encode($_SESSION['messages_new_notifications']));
unset($_SESSION['auth_messages_new_notifications']);

} elseif ($_GET['check']==3){

iMapFunction();
echo $_SESSION['messages_unread_count'];
}

2 个答案:

答案 0 :(得分:0)

只需创建一个在一次调用中执行所有操作的端点:

我不知道php但是创建一个关联数组并将数据分配给它。

x = {};
x['message_overviews'] = $_SESSION['message_overviews'];
x['auth_messages'] = $_SESSION['auth_messages_new_notifications'];
x['messages_unread_count'] = $_SESSION['messages_unread_count'];
print_r(json_encode(x));

然后在您的jquery响应函数中,您可以访问您的数据并执行操作:

function(data){
  console.log(data.message_overviews);
  console.log(data.auth_messages);
  console.log(data.messages_unread_count);
}

答案 1 :(得分:0)

我们的PHP可以在一个调用中返回所有那个:

<?php

iMapFunction();
$response = array(
 'message_overviews' => $_SESSION['message_overviews'],
 'messages_new_notifications' => $_SESSION['messages_new_notifications'],
 'messages_unread_count' => $_SESSION['messages_unread_count']
);

print_r(json_encode($response));

?>

你可以像以前一样迭代每个数据:

setInterval(function(){
    jQuery.ajax({ url: '/ajax-msgs.php', dataType: 'json', cache: 'false', success: function(data) {

        var message_overviews = data.message_overviews;
        var messages_new_notifications = data.messages_new_notifications;
        var messages_unread_count = data.messages_unread_count;
        var msghtml = '';

        jQuery.each(message_overviews, function() {
            msghtml += '<li><a href="message.php?id=' + this.msg_id + '">' + this.msg_subject + '</a></li>';
        });
        jQuery("#msg-menu").html(msghtml);

        jQuery.each(messages_new_notifications, function() {
            jQuery.jGrowl(this.msg_title, { life: 12000});
        });

        jQuery("#msg-count").text(messages_unread_count);

    }});

}, 30000);