Я не могу отладить это сообщение, которое появилось как неделю назад.
Я попытался восстановить старые файлы, но это странно, ничто не решает мою проблему.
Итак: у меня есть два длинных запроса на опрос. (отключение одного из них не помогает).
например, это один из них:
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; }
Как вы можете видеть, я отправил заголовки кеш-контроля, так что это не должно быть проблемой, описанной здесь. У меня также нет установленного 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/
Просто чтобы ответить на этот вопрос: это нормально? (Я не вижу эту проблему на других сайтах, где используется комета), а если нет – где искать проблему, клиентскую или серверную? Здесь они говорят, что в таком случае запрос вообще не отправляется, но это не так, мои скрипты работают, и я не могу общаться (это скрипт чата)
Это абсолютно нормально в хроме (на данный момент). Здесь обсуждалась дискуссия об изменениях, по существу, в ожидании запросов, что они отображали определенные заголовки неправильно, поэтому теперь они показывают предупреждение, что это временные заголовки.
Из обсуждения:
Панель сети: добавьте осторожность в предварительные заголовки запросов. (было: в инструментах разработчика неверны заголовки запросов для ожидающих запросов)
Я не знаю, когда исправление действительно было выпущено, или если вы оставите Chrome открытым все время, и поэтому он не обновлялся какое-то время – но почти наверняка это ничего не вы сделали – как работает Chrome сейчас.
Эта проблема также может появиться, если вы забудете сделать заголовки CORS при вызове перекрестного домена.
header("Access-Control-Allow-Origin: *");
В моем случае это потому, что запросы возвращают несколько результатов, которые переписывают переменную сеанса в корневом кодеригенере. Это запрос AJAX от jQuery.
Был решен удалены все повторные результаты.
Вашей проблемой может быть заголовок (), следующий за функцией ob_start (). Попробуйте поместить заголовок () перед запуском буфера следующим образом:
header("Content-Type: application/json"); header("Cache-Control: no-cache, must-revalidate"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); ob_start();