我在这里做了一个噩梦,所以任何帮助将不胜感激!首先,我将解释我正在尝试做的事情:
我正在尝试使用 Yii 框架在我的本地主机 MAMP 服务器上实现如下所述的系统: https ://stackoverflow.com/a/1086448/1034392。我有一个函数可以检查数据库中是否有任何新通知 - 如果有,它会解析它们并 json 对它们进行编码。我每 5 秒在一个 while 循环中调用这个函数。
所以:去 /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
“中止”(显示在萤火虫中)但 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' .. 但这也不起作用。
这似乎无处可去!有人可以插队吗?
非常感谢