пустое тело ответа в ajax (или 206 частичное содержимое) - PullRequest
2 голосов
/ 02 мая 2010

Я чувствую себя совершенно глупо, потому что я потратил два часа на решение задачи, которая должна быть очень простой и которую я решал много раз раньше. Но теперь я даже не уверен, в каком направлении копать.

Мне не удается получить статический контент с помощью ajax с локальных серверов (Apache и Mongrel). Я получаю ответы 200 и 206 (в зависимости от сервера), пустой текст ответа (хотя заголовок Content-Length всегда корректен), firebug показывает запрос красным цветом.

Javascript очень универсален, я получаю такие же результаты даже здесь: http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first (просто измените местоположение документа на 'http://localhost:3000/whatever') Так что, вероятно, это не причина.

Ну, теперь у меня нет идей. Я также могу опубликовать http-заголовки, если это поможет.

Спасибо!

Response Headers
Connection  close
Date    Sat, 01 May 2010 21:05:23 GMT
Last-Modified   Sun, 18 Apr 2010 19:33:26 GMT
Content-Type    text/html
Content-Length  7466

Request Headers
Host    localhost:3000
User-Agent  Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Referer http://www.w3schools.com/ajax/tryit_view.asp
Origin  http://www.w3schools.com

Response Headers
Date    Sat, 01 May 2010 21:54:59 GMT
Server  Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8l DAV/2 mod_jk/1.2.28
Etag    "3d5cbdb-fb4-4819c460d4a40"
Accept-Ranges   bytes
Content-Length  4020
Cache-Control   max-age=7200, public, proxy-revalidate
Expires Sat, 01 May 2010 23:54:59 GMT
Content-Range   bytes 0-4019/4020
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Content-Type    application/javascript

Request Headers
Host    localhost
User-Agent  Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Origin  null

ОБНОВЛЕНО
Я нашел проблему, это было о междоменных запросах. Я знал, что есть ограничения, но думал, что они смягчены для локальной файловой системы и локальных серверов. (в любом случае ожидается более описательное сообщение об ошибке)
Спасибо всем!

1 Ответ

1 голос
/ 02 мая 2010

Кажется, у озера только проблема кеширования. Просто удалите кеш внутри Internet Explorer и повторите свой эксперимент. Все HTTP GET запросы будут кэшироваться . IE кеширует также ajax ответов. Если вам это не нравится, вы можете добавить URL с текстом вроде «? P = blala». Где «p» - это имя, которое будет интерпретироваться как имя параметра, а текст «blala» должен быть уникальным в каждом запросе. Обычно для создания такой «блалы» используется конструкция (new Date).getTime(). IE «подумает», что URL новый и всегда будет отправлять запрос на сервер.

ОБНОВЛЕНО : Кэширование статических данных будет выполняться во всех браузерах, особенно если веб-сервер явно разрешает это: см. Cache-Control: max-age=7200, public, proxy-revalidate - ответ от сервера. Просто попробуйте перейти на http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first и изменить строку

xmlhttp.open("GET","ajax_info.txt",true);

до

xmlhttp.open("GET","ajax_info.txt?p=" + (new Date).getTime(),true);

затем нажмите «Изменить и нажмите меня». Затем, если вы нажмете кнопку «Изменить содержимое», вы увидите в HTTP-трафике полные данные, которые содержатся. Я не вижу код 206 времени. Что это означает, если в Response есть "Accept-Ranges: bytes" и "Content-Range" вроде "bytes 0-4019/4020" внутри заголовка HTTP, который вы можете прочитать на http://benramsey.com/archives/206-partial-content-and-range-requests/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...