Нет, у меня нет JS Framework на месте
Сначала исправьте.Вы не хотите манипулировать запросами XMLHTTP самостоятельно. jQuery - это каноническая библиотека JS SO, и она довольно изящна.
По сути, я хочу отображать строку таблицы по мере поступления данных, каждая строка таблицы будет запросом на получениеданные с другого сайта.
Сколько строк вы будете иметь дело?Все ли они должны загружаться асинхронно?
Давайте разберемся с этим простым и понятным способом.Создайте сценарий, который не выполняет ничего, кроме:
- Извлечение идентификатора сайта и получение данных с соответствующего URL-адреса
- Отображение этих данных в некотором формате передачи данных, HTML или JSON.
Тогда нужно просто сделать страницу, которую получает пользователь, которая будет содержать код Javascript, который делает вызовы ajax для средства извлечения данных, а затем либо непосредственно вставляет HTML-код в страницу, либо преобразуетданные в HTML, а затем помещают их в страницу.
Вы заметите, что Smarty ни в коем случае не участвует.;)
Это решение крайне нецелесообразно для чего-то большего, чем тривиальное число сайтов, которые должны опрашиваться асинхронно.Если вам нужны строки для десятков или сотен сайтов, это означает, что каждому клиенту нужно будет сделать десятки или сотни запросов на ваш сайт для каждого обычного просмотра страницы.Это убьет ваш сервер, если более чем один или два человека загрузят страницу одновременно.
Можете ли вы рассказать нам больше о том, что вы делаете, и что вы пытаетесь достичь?Существует множество способов решить эту проблему, но все они зависят от того, что вы делаете.
Обновление для редактирования вашего вопроса.
Во-первых, рассмотрите возможность использования фактического HTMLпарсер вместо регулярных выражений. DOM очень мощный, и вы можете нацеливаться на определенные элементы, используя XPath .
Вместо этого я просто хочу получить первый массив, который возвращается с индивидуальной информацией, и добавить значения в строку таблицы на лету.
Итаквот основная проблема.Вы хотите сделать что-то асинхронно. В PHP нет встроенного обобщенного способа выполнения асинхронных задач. Существует несколько способов решения этой проблемы.
Первый способ описан выше.Вместо выполнения любых запросов скручивания при загрузке страницы вы передаете работу конечному пользователю, и браузер конечного пользователя делает запросы к вашему скрипту очистки один за другим, заполняя результаты.
Вторым является использование асинхронной рабочей очереди, например Gearman .Он имеет отличную поддержку PHP через расширение PECL .Вы должны написать одного или нескольких работников, которые могут принимать запросы, и постоянно поддерживать их пул.Чем больше бассейн, тем больше вещей вы можете сделать одновременно.После того, как все данные возвращены, вы можете выбросить полный набор данных на вашем шаблонизаторе и назвать его хорошим.
Вы можете даже объединить два, сделав, чтобы пользователь сделал только один, два или три дополнительныхзапросы через ajax для получения части возвращенных данных.Черт возьми, вы даже можете запускать фоновые задания и сразу же возвращать страницу, а затем запрашивать результаты фоновых заданий позже через ajax.
Независимо от того, как вы справляетесь с этим, у вас есть гигантский, огромныйпроблема.Вы очищаете чей-то сайт.Возможно, вы очень часто просматриваете чей-то сайт .Не все в порядке с этим.Вам следует серьезно рассмотреть вопрос о кэшировании результатов или даже обратиться к каждому поставщику, чтобы выяснить, есть ли у него API или экспорт данных, к которому вы можете обратиться вместо этого.