Есть ли способ отображать video_feed_ajax.php каждый раз, когда он проходит цикл, поэтому видео показывается по мере его прохождения, а не только в конце?
Я собираюсь интерпретировать это так:
Есть ли способ обработать данные из запроса, когда они возвращаются с сервера, вместо того, чтобы обрабатывать весь документ сразу?
На что ответ «скорее всего, нет» в данном конкретном случае.
Вы пишете здесь ajax на голом металле и слепо предполагаете, что любые изменения readyState будут в вашу пользу. (Кстати, это плохая практика. Рассматривали ли вы использование современной библиотеки Javascript, такой как jQuery?)
Проблема в том, что это за состояния готовности и когда они запускаются. Состояния:
0: Неотправлено: объект существует.
1: Открыто: объект находится в процессе выполнения HTTP-запроса.
2: полученные заголовки: запрос выполнен и HTTP-заголовки возвращены.
3: Загрузка: тело HTTP-запроса передается и обрабатывается.
4: Готово: тело HTTP-запроса полностью загружено.
Различные браузеры по-разному обрабатывают 0, 1 и 2, поэтому давайте представим, что они не существуют.
Теперь в спецификации сказано, что ответ должен быть частично заполненным, поскольку он становится доступным , но ваш код срабатывает только при изменении состояния. Вы только когда-нибудь увидите два изменения состояния: загружается или готово. Это означает, что ваш существующий код никогда не увидит частичный документ!
Теперь, мой инстинкт инстинкта в том, что вы можете установить setTimeout
, когда readyState загружается, а затем постоянно опрашивать ответ, чтобы увидеть, что изменилось, но это вряд ли сработает. Как описано в этом предыдущем вопросе здесь, на SO , , некоторые браузеры не реализуют загрузку readyState! Это означает, что ваш код может только надежно видеть Done readyState.
Таким образом, вы не можете сделать это ... без посторонней помощи.
В HTML5 предлагается новая технология под названием Серверные события . Он предназначен для того, чтобы делать именно то, что вы пытаетесь сделать здесь: отправлять отдельные фрагменты данных, по одному, вплотную и обрабатывать их независимо. Существуют собственные реализации в Chrome и Opera, и есть плагин jQuery для эмуляции интерфейса , когда браузер не реализует его. Они хотели вставить его в Firefox 4, но не смогли сделать это. Я только знаю, что эта технология существует, а не то, что она работает или подходит для ваших целей.