php 注意:显示临时标题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21552146/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
CAUTION: provisional header are shown
提问by CBeTJlu4ok
I cant debug this message which appeared like a week ago.
我无法调试一周前出现的这条消息。
I tried restoring to old files but this is odd, nothing solves my problem.
我尝试恢复到旧文件,但这很奇怪,没有解决我的问题。
So: I have two long polling requests. (turning one of them off does not help).
所以:我有两个长轮询请求。(关闭其中之一无济于事)。
for example this is one of them:
例如,这是其中之一:
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;
}
As you can see, I sent cache-control headers, so this should not be problem described hereI also dont have any adBlocker installed and this is local installation.
如您所见,我发送了缓存控制标头,所以这应该不是这里描述的问题,我也没有安装任何 adBlocker,这是本地安装。
there is a client-side script
有一个客户端脚本
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'
);
}
Is this normal? I cant be normal message for long polling - since its a pending request. Its just does not seem to be documented anywhere
这是正常的吗?我不能成为长轮询的正常消息 - 因为它是一个待处理的请求。它似乎没有在任何地方记录
Note: also I have many short-polling requests and this could be case where more then 6 requests cancel each other but - I also tried turning all other requests off, except one (long polling) and this is not a case
注意:我还有很多短轮询请求,这可能是超过 6 个请求相互取消的情况,但是 - 我也尝试关闭所有其他请求,除了一个(长轮询),这不是一种情况
Here is a original script working so you can see the message: http://www.techytalk.info/wordpress/quick-chat/
这是一个原始脚本,因此您可以看到消息:http: //www.techytalk.info/wordpress/quick-chat/
Just to summirize this question: Is this normal? (I don't see this problem on other sites where comet is used) - and if not - Where should I seek for problem, clientside or server-side? Herethey say that in such case request is not sent at all, but thats not true, my scripts are working and I cant chat (this is a chat script)
总结一下这个问题:这正常吗?(我在使用彗星的其他网站上没有看到这个问题) - 如果没有 - 我应该在哪里寻找问题,客户端还是服务器端?在这里他们说在这种情况下根本不发送请求,但事实并非如此,我的脚本正在运行并且我无法聊天(这是一个聊天脚本)
回答by Dave C
This problem can also show up if you forget to do CORS headers in a cross domain call.
如果您忘记在跨域调用中执行 CORS 标头,也会出现此问题。
header("Access-Control-Allow-Origin: *");
回答by dave
This is completely normal in chrome (as of recently). There was a discussion herewhere they discuss the change, essentially on pending requests it was showing certain headers incorrectly, so now they show a warning that these are provisional headers.
这在 chrome 中是完全正常的(截至最近)。有一个讨论here,他们讨论了更改,主要是在未决请求上它错误地显示了某些标头,所以现在他们显示警告,这些是临时标头。
From the discussion:
从讨论:
Network Panel: add caution about provisional request headers. (was: In developer tools, request headers for pending requests are incorrect)
网络面板:添加有关临时请求标头的注意事项。(原为:在开发者工具中,待处理请求的请求标头不正确)
I don't know when the fix actually got released, or if you leave Chrome open all the time and so it didn't update for a while - but almost certainly it is nothing you did - just how Chrome works now.
我不知道修复程序何时真正发布,或者您是否一直让 Chrome 保持打开状态,因此它有一段时间没有更新 - 但几乎可以肯定,您没有做任何事情 - 只是 Chrome 现在的工作方式。
回答by fdbazan
In my case is because the queries return several results that rewrite the session variable in the framework codeigniter. It's in a request AJAX by jQuery.
就我而言,是因为查询返回了多个结果,这些结果重写了框架 codeigniter 中的会话变量。它位于 jQuery 的请求 AJAX 中。
Was solved deleted all repeated results.
已解决删除所有重复结果。
回答by Gaurav Joseph
Your problem may be the header() coming after the ob_start() function. Try to put the header() before starting the buffer like so:
您的问题可能是 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();

