我无法调试此消息,就像一周前一样。
我尝试恢复旧文件,但这很奇怪,没有解决我的问题。
所以:我有两个长轮询请求。 (关闭其中一个没有帮助)。
例如,这是其中之一:
public function update_private_messages_ajax_handler(){
global $wpdb;
global $bp;
$chat_table = $wpdb->prefix . 'bp_dollars_chat';
$current_user = $bp->loggedin_user->id;
ob_start();
header("Content-Type: application/json");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
$startTime = time();
while((time()-$startTime)<=20) {
$messages = $wpdb->get_results(
$wpdb->prepare("(SELECT *
FROM $chat_table
WHERE to_user = %d
AND recd = 1
AND id > %d
ORDER BY id DESC) ORDER BY id ASC
", $current_user, $_POST['last_id'])
);
if($messages) {
foreach($messages as $v){
//$v->timestring = date_i18n($this->date_format.' - '.$this->time_format, $v->unix_timestamp+$this->gmt_offset);
$v->name = get_dollar_name($v->from_user);
$v->avatar = get_avatar($v->from_user, 50);
//$v->message = convert_smilies( $v->message );
}
$response = json_encode(array('no_participation' => $this->no_participation, 'success'=> 1, 'messages'=>$messages));
echo $response;
ob_flush(); flush();
exit;
} else {
sleep($this->options['timeout_refresh_messages']);
}
}
$response = json_encode(array('no_participation' => $this->no_participation, 'success'=> 0));
echo $response;
ob_flush(); flush();
exit;
}
正如您所看到的,我发送了缓存控制标头,因此这不应该是问题described here 我也没有安装任何adBlocker,这是本地安装。
有一个客户端脚本
update_private_messages: function() {
jQuery.post(quick_chat.ajaxurl, {
action: 'quick-chat-ajax-update-pmessages',
last_id: quick_chat.last_private_id
},
function(data) {
console.log(data);
if(data.success == 1) {
var updates = data.messages;
var already_notified = 0;
var chat_history = jQuery('.popoverx.chat.in .chathistory');
for(var i=0;typeof(updates[i])!='undefined';i++){
// this in case if window open and new message is for current user
if(quick_chat.privateOpen == true && (quick_chat.privateOhter == updates[i].from_user || quick_chat.privateOhter == updates[i].to_user )) {
// @TODO do I animate every time?
jQuery(chat_history).prepend(quick_chat.single_private_html(updates[i])).animate({scrollTop: 0}, 500);
} else if(updates[i].recd == 1 && updates[i].from_user != quick_chat.user_id) {
// not yet in unread group
if(quick_chat.privateUnread.indexOf(parseInt(updates[i].from_user)) == -1) {
quick_chat.privateUnread.push(parseInt(updates[i].from_user));
}
if(already_notified == 0 && quick_chat.last_private_id != 0 && updates[i].from_user != quick_chat.user_id) {
if(quick_chat.play_audio == 1) {
quick_chat.audio_element.play();
}
already_notified = 1;
}
}
}
// update label
var unreadIcon = jQuery('#bs-navbar-right > li > a.messages');
if(quick_chat.privateUnread.length != 0) {
unreadIcon.find('span').remove().end().append('<span class="label label-danger">'+ quick_chat.privateUnread.length +'</span>')
} else {
unreadIcon.find('span').remove()
}
quick_chat.last_private_id = updates[updates.length-1].id;
}
quick_chat.update_private_messages();
}, 'json'
);
}
这是正常的吗?我不能成为长时间轮询的正常消息 - 因为它是一个待处理的请求。 它似乎没有记录在任何地方
注意: 我也有很多短轮询请求,这可能是超过6个请求相互取消的情况但是 - 我还尝试关闭所有其他请求,除了一个(长轮询),这不是一个案例
这是一个原始脚本,因此您可以看到以下消息: http://www.techytalk.info/wordpress/quick-chat/
总结一下这个问题:这是正常的吗? (我没有在使用彗星的其他网站上看到这个问题) - 如果没有 - 我应该在哪里寻找问题,客户端或服务器端? Here他们说在这种情况下请求根本没有发送,但那不是真的,我的脚本正在工作,我无法聊天(这是一个聊天脚本)
答案 0 :(得分:12)
如果您忘记在跨域调用中执行CORS标头,也会出现此问题。
header("Access-Control-Allow-Origin: *");
答案 1 :(得分:7)
这在chrome中是完全正常的(截至最近)。有一个讨论here,他们讨论了这一变化,主要是因为它正在显示某些标题错误的待处理请求,所以现在它们会显示这些是临时标题的警告。
从讨论开始:
网络面板:添加关于临时请求标头的警告。 (是:在开发人员工具中,待处理请求的请求标头不正确)
我不知道该修复程序何时实际发布,或者您是否一直打开Chrome版本,因此它暂时不会更新 - 但几乎可以肯定,这不是您所做的 - 只是Chrome现在的工作方式。
答案 2 :(得分:1)
在我的情况下是因为查询返回了几个在框架codeigniter中重写会话变量的结果。它是由jQuery请求AJAX。
解决后删除了所有重复的结果。
答案 3 :(得分:0)
您的问题可能是ob_start()函数之后的header()。尝试在启动缓冲区之前放置header(),如下所示:
header("Content-Type: application/json");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
ob_start();