我在这里遇到一些麻烦,希望您能提供帮助!首先,我将解释我要做的事情:
我正在尝试实现一个像这里描述的系统:https://dev59.com/wXNA5IYBdhLWcg3wHp-B#1086448,使用 Yii 框架在我的本地 MAMP 服务器上。 我有一个函数来检查 DB 中是否有任何新的通知 - 如果是,则解析它们并进行 JSON 编码。 我在 while 循环中每 5 秒钟调用此函数。
所以:访问 /user/unreadNotifications 会触发以下操作
这很好用-在浏览器中访问链接并验证JSON响应,一切正常。然后我尝试了各种jQuery方法使其工作……我发现唯一可行的方法是使用
我正在尝试实现一个像这里描述的系统:https://dev59.com/wXNA5IYBdhLWcg3wHp-B#1086448,使用 Yii 框架在我的本地 MAMP 服务器上。 我有一个函数来检查 DB 中是否有任何新的通知 - 如果是,则解析它们并进行 JSON 编码。 我在 while 循环中每 5 秒钟调用此函数。
所以:访问 /user/unreadNotifications 会触发以下操作
Yii::log('test'); // to check it's getting called
$this->layout=false;
header('Content-Type: application/json');
// LONG POLLING
while (Yii::app()->user->getNotifications() == null) {
sleep(5);
}
echo Yii::app()->user->getNotifications(); // prints out json if new notification
Yii::app()->end();
return;
这很好用-在浏览器中访问链接并验证JSON响应,一切正常。然后我尝试了各种jQuery方法使其工作……我发现唯一可行的方法是使用
$.ajax
进行POST请求,但仅当等待通知时(因此会返回一些JSON)。使用$.get
或$.post
会被“abort”(在firebug中显示),但URL已被调用(因为我可以看到日志文件已更新)-奇怪。我的最初设置使用$.get
: <script type="text/javascript">
function notificationPoll() {
$.get('<?php echo Yii::app()->createUrl('user/unreadNotifications') ?>','', function(result) {
$.each(result.events, function(events) {
alert('New Notification!');
});
notificationPoll();
}, 'json');
}
</script>
<script type="text/javascript">
$(document).ready(function() {
$.ajaxSetup({
timeout: 60 //set a global ajax timeout of a minute
});
notificationPoll();
});
</script>
由于某些原因,这个请求被“中止”了。尽管它不是CORS请求,但我已经尝试使用“jsonp”,但也没有用。
似乎无法解决这个问题!有谁能提供帮助吗?
非常感谢