У меня есть следующий код JavaScript на странице. Когда выполняется вызов ajax, я вижу, что в разделе обозревателя обозревателя / отладчика возникает ошибка net :: ERR_EMPTY_RESPONSE . Он отлично работает в среде localhost, но бросает выше ошибки в производстве.
В клиентском коде,
<script> $(document).ready(function(){ $("#identityLinks a").on("click", function(){ value = $(this).attr("id"); if(value != "") { $.ajax({ url: "publish/updateUsersData.php", type: "POST", data: {receiverId: value}, contentType: "application/x-www-form-urlencoded; charset=UTF-8", dataType: "json", success: function(data) { //alert(data["result"]); console.log(data["result"]); }, error: function(xhr, textStatus, errorThrown) { //alert(xhr +" "+ textStatus +" "+errorThrown); console.log(xhr +" "+ textStatus); } }); } }); </script>
В Server-side code (PHP) у меня есть следующий код в updateUsersData.php :
<?php header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 01 Jan 1996 00:00:00 GMT'); header('Content-type: application/json; charset=UTF-8'); if(isset($_POST["receiverId"])) { $receiver_id = trim($_POST["receiverId"]); $arr = array("result"=>$receiver_id); echo json_encode($arr); die(); break; } else { $arr = array("result"=>"No user data received. Error!"); echo json_encode($arr); die(); break; } ?>
Считаете ли вы, что это связано с заголовком с ответами Expire или ошибкой в версии JQuery 1.9.1? Я не нашел таких ошибок, когда мы были предыдущими версиями. Кроме того, этот код не обновлялся в течение 5 месяцев, а ошибки браузера ползут только некоторое время назад. Спасибо за вашу помощь и поддержку.
Редактировать:
Статус : этот ВОПРОС пока не разрешен. Необходима помощь экспертов JQuery AJAX . Пожалуйста, продвигайте этот вопрос. Кроме того, CORS не несет ответственности за эту проблему.
При нажатии на консоль, в которой произошла ошибка выше, я был непосредственно взят в эту строку в
JQuery 1.9.1 where console error lines point to: => xhr.send( ( s.hasContent && s.data ) || null ); Also these ones are shown in console error mark: => transport.send( requestHeaders, done ); => ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); => return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined;
Является последней версией jquery, ответственной за ошибку PROVISIONAL HEADERS A SHOWN.
Я считаю, что ваш запрос не классифицируется как «простой запрос» по спецификации CORS:
http://www.w3.org/TR/cors/#simple-cross-origin-request-0
поскольку вы настраиваете заголовок ответа для Content-Type: application / json.
Таким образом, вашему серверу необходимо будет обработать запрос перед полетом, который включает в себя установку некоторых дополнительных заголовков как для запроса, так и для ответа на запрос CORS для успеха
Вот хорошая статья о том, что вам нужно сделать – проверить бит под «не так просто»:
У меня такая же проблема на моей странице. Я думаю, что это происходит из-за количества переменных или насколько они велики. У меня есть страница, которая отправляет json из около 250 переменных без каких-либо проблем, но эта ошибка возникает на этой странице, тогда как должно быть отправлено около 1500 переменных. Эта проблема новая. Раньше каждая вещь даже с 3000 переменными была без проблем. Эта проблема возникает для меня как в хроме, так и в firefox в последних версиях. Это не ошибка на стороне сервера, потому что я настроил apache для восстановления 1 миллиона переменных из 30 Мб данных.
У меня была такая же ошибка, и я смог ее исправить, отправив все данные, которые мне нужно обработать в массиве, на сервер, а затем снова вернул обновленный массив клиенту, так что будет сделан только один вызов AJAX.
Я не смог определить точную причину этой проблемы, но я уверен, что происходит, что какой-то буфер заполняется до всех вызовов AJAX, заставляя сервер закрывать некоторые из этих запросов ,
Надеюсь это поможет.
Так что это может произойти по ряду причин, независимо от используемого языка или технологии. Я столкнулся с этим с чрезвычайно малыми полезными нагрузками, которые отправляются туда и обратно с 15-20 точками данных с использованием углового ресурса. PHP, JQuery, Angular все обрабатывают ошибку по-разному, но результаты сводятся к одной из трех вещей.
Задержки или проблемы с сетью, я это делал на чрезвычайно медленных подключениях, опять-таки это может быть что угодно плохому маршрутизатору или неправильной конфигурации брандмауэра, чтобы просто на дрянной сети, в такие программы, как avast, которые устанавливали прокси-сервер, чтобы защитить вас от вирусов ,
Высокая загрузка на сервере, я заставил сервер быть на 100% процессор от стресс-тестирования, и это будет происходить на случайных вызовах, потому что сервер недостаточно быстро передает запросы. Это трудно исправить и действительно является проблемой масштабирования для системы.
Огромные наборы данных, при отправке больших сообщений, которые откликаются, обычно это можно устранить, настроив настройки таймаута на любом веб-сервере, который вы используете.
Я нашел такую же проблему из-за моей сетевой проблемы, может быть, ваша сеть также вызывает это.
Я также получал ту же ошибку при использовании XMLHttpRequest ().
Однако я смог разрешить ошибку, отключив ограничение памяти для скрипта на стороне сервера.
Это делается путем установки memory_limit в -1 в файле php.ini. По умолчанию установлено значение 128M, поэтому вы также можете увеличить размер памяти, а не полностью отключить ее, так как это может занять много ресурсов сервера.
Я смог решить это в большинстве случаев с помощью простой функции, которую я написал для сброса / сброса всей памяти мусора и сброса / сброса выходной памяти после любых / всех циклов.
function memes(){ ob_flush(); ob_end_flush(); gc_collect_cycles(); ob_start(); gc_enable(); }