使用PHP实现反向Ajax

6
我想在使用PHP和jquery的应用程序中实现反向Ajax。我已经在Google上搜索了一些内容,发现了XAJA,但似乎这是一个付费应用程序。是否有开源应用程序可用于相同的操作或者有人已经实现了此功能?任何指针或提示都将非常有帮助。谢谢!

你是指像Comet或HTML5风格的Websockets这样的东西吗? - Marc B
我已经了解了Comet,但它需要服务器端的强大支持,并且据我所知,它在Apache服务器上表现不佳。 - Ankit Jaiswal
HTML5风格的Websockets似乎很有趣,但需要浏览器的支持。根据文档,目前只有Safari和Chrome支持它? - Ankit Jaiswal
4个回答

1

我知道两种反向AJAX:
1- 轮询
2- 推送

我认为轮询比较容易实现,你只需要让你的javascript每隔一段时间向服务器发出一个常规请求,当服务器有数据时它会响应。这就像是一个ping,有些人称之为心跳,但这是解决这个问题的非常明显的解决方案。然而,它可能会过载服务器。

编辑 简单的轮询示例代码:
服务器端:

<?php
//pong.php php isn't my main thing but tried my best!
$obj = new WhatsNew();
$out = "";
if ($obj->getGotNew()){
    $types = new array();
    foreach ($obj->newStuff() as $type)
        {
            $new = array('type' => $type);
            $types[] = $new;
        }

    $out = json_encode($types);
}
else{
    $out = json_encode(array('nothingNew' => true));
}


客户端:

function ping(){
    $.ajax(
        {

            url : "pong.php",
            success : function (data){
                data = JSON.parse(data),
                if (data['nothingNew'])
                    return;
                for(var i in data){
                    var type = data[i]['type'];
                    if (type && incomingDataHandlers[type]){
                        incomingDataHandlers[type]();
                    }
                }


        });
}
incomingDataHandlers = {
    comments: function () {
        $.ajax({
            url: "getComments.php",
            method: "GET",
            data: getNewCommentRequsetData() // pass data to the server;
            success : function (data){
                //do something with your new comments
            }
        });
    },
    message: function (){
        $.ajax({
            url: "getMessages.php",
            method: "GET",
            data: getNewMessageRequestData() // pass data to the server;
            success : function (data){
                //do something with your new messages
            }
        });
    }
}
$(docment).ready(function () {
    setInterval(ping, 1000);
})

谢谢Amjad,我知道这些类型。我正在寻找一些关于如何实际实现它的提示或指针。 - Ankit Jaiswal
我看过你的代码,但那不像是轮询或推送的例子。这只是一个在固定间隔后重复的Ajax请求的简单示例。 - Ankit Jaiswal

1

谢谢Knubo,看起来很不错。不过,我还有另一个不错的链接。看看这个:http://www.ape-project.org/home.html 或许将来对你有帮助。 - Ankit Jaiswal
我一定会尝试您的解决方案。 - Ankit Jaiswal

0

0

你有检查过APE吗?

它是一种基于推送的实时数据流技术,通过单个低容量的ajax连接进行传输。这个概念非常有用,你可能可以在你的服务器端实现中复制同样的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接