X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> AJAX и циклический запуск
1nSane
1nSane
Topic Starter сообщение 12.4.2010, 11:50; Ответить: 1nSane
Сообщение #1


Тема кажется запутанной, но постараюсь объяснить... Сразу говорю, в JS и Ajax я полный нуб, PHP знаю нормально...
Есть БД, в которой содержатся тысячи ссылок, есть задача: проверить их на живучесть (используется AJAX).

Что имеем...
Функция AJAX для подгрузки результатов в index.php...
<script>
function doLoad(html,div,url){
if (window.XMLHttpRequest){
request = new XMLHttpRequest();
request.onreadystatechange=function() {processRequestChange(html,div);};
request.open("GET",url,true);
request.send(null);
} else if (window.ActiveXObject){
request=new ActiveXObject("Microsoft.XMLHTTP");
if (request){
request.onreadystatechange=function() {processRequestChange(html,div);};
request.open("GET",url,true);
request.send();
}}}

function processRequestChange(html,div) {
if (request.status == 200) {
document.getElementById(div).style.display='block';
document.getElementById(html).innerHTML=request.responseText;
}}
Вызываем ее так:
onclick="doLoad('indexHTML','indexdiv','check.php');"
Далее все виснет минут на 20 (т.к. в check.php идет обработка пары тысяч URL), затем нам в 'indexHTML' вываливает результат в виде:
линк1 ... жив
линк2 ... мертв
...
линк1120 ... жив
В коде check.php примерно так:
[php]<?php
header("Content-type: text/html; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

include("config.php");
//...
//обработка ссылок
//...
?>[/php]Естественно, меня это не устраивало. Захотел разбить на группы и выводить каждые 5 строк, в запросе к БД лимиты прописал, через GET стал передавать параметр типа:
onclick="doLoad('indexHTML$i','indexdiv$i','check.php?start=$i');"
Где $i = цикл с шагом 5, от нуля...
в выводе check.php генерирует дополнительные:
<div id="indexdiv$i" style="display: block; "><span id="indexHTML$i"></span></div>
А дальше в check.php стоит тот же самый вызов:
<script>doLoad('indexHTML$i','indexdiv$i','check.php?start=$i');</script>
Казалось бы, все отлично, но столкнулся с проблемой... при таком раскладе JS функция doLoad не вызывается :(
Т.е. если я из index.php жму, показывает первые 5 результатов и встает раком, если запустить напрямую check.php, то отрабатывается вызов JS.

Пытался найти решение, не нашел :( Помогите, пожалуйста!
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 12.4.2010, 12:16; Ответить: Letmetouchyou
Сообщение #2


столько ссылком думаю быстро непроврешиь. даже если использовтаь аякс - асинхроно то будет проверяться, но при переходе со страниц все обнулиться.
Лутше сделать в БД поле жив/мертв и проверять кроном каждый час например. или добавить еше поле дата_проверки и при запросе пользователя, если дата провекри меньше текущее на час, но делать проверку.
(In$ane @ 12.4.2010, 14:50) *
Казалось бы, все отлично, но столкнулся с проблемой... при таком раскладе JS функция doLoad не вызывается :(

потому что так вы написали - ето невалидный js.
onclick="doLoad('indexHTML'+i+','indexdiv'+i+','check.php?start='+i+');"
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
1nSane
1nSane
Topic Starter сообщение 12.4.2010, 12:24; Ответить: 1nSane
Сообщение #3


Letmetouchyou
С кроном это все понятно, это не проблема, но сейчас нужна именно такая реализация... т.е. человек должен видеть что процесс идет, он должен видеть не готовый список из 1000 пунктов, а постепенный вывод по 5 строк...

По поводу невалидности... у меня там на самом деле через echo PHP, поэтому все там ОК ;) с событием onClick нет проблем, есть проблемы с вызовом напрямую, когда файл отдается как результат отработки AJAX.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
1nSane
1nSane
Topic Starter сообщение 14.4.2010, 9:30; Ответить: 1nSane
Сообщение #4


Неужели никому не требовалась подобная вещь?
Я сначала думал это от того, что при подгрузке через AJAX не срабатывают проверки на window.XMLHttpRequest и window.ActiveXObject, вставил в функцию простой Alert("тест") до проверок и все равно ничего не призошло :(
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
сообщение 14.4.2010, 10:28; Ответить: Alcorn
Сообщение #5


Код не смотрел, но судя по описанию нужен простейший XMLHttpRequest в цикле. Отправили первый запрос, получили ответ (вывели данные на экран), затем создали новое соединение, прибавили шаг к параметру и так по кругу.

Как создать XMLHttpRequest и отправить данные - можно прочесть на http://xmlhttprequest.ru/
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
1nSane
1nSane
Topic Starter сообщение 14.4.2010, 10:36; Ответить: 1nSane
Сообщение #6


Alcorn, он и используется, вызывается страница1 через него, а из страницы1 страница2 уже автоматом не грузится :(
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
сообщение 14.4.2010, 10:50; Ответить: Alcorn
Сообщение #7


Чудным образом появились какие-то новые страницы...

Есть только одна главная страница, на ней расположен XMLHttpRequest. Далее в цикле идёт запрос на одну и ту же серверную страницу, например check.php. В check.php находится серверный код, опрашивающий базу и выдающий клиенту html-данные вида -
линк1 ... жив
линк2 ... мертв
Никаких js-скриптов и клиентских функций там нет.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
1nSane
1nSane
Topic Starter сообщение 14.4.2010, 10:57; Ответить: 1nSane
Сообщение #8


Alcorn
Я так выразился, чтобы было яснее.
Я в JS не силен, пытался цикл встроить в этот кусок кода:
<script>
function doLoad(html,div,url){
if (window.XMLHttpRequest){
request = new XMLHttpRequest();
request.onreadystatechange=function() {processRequestChange(html,div);};
request.open("GET",url,true);
request.send(null);
} else if (window.ActiveXObject){
request=new ActiveXObject("Microsoft.XMLHTTP");
if (request){
request.onreadystatechange=function() {processRequestChange(html,div);};
request.open("GET",url,true);
request.send();
}}}function processRequestChange(html,div) {
if (request.status == 200) {
document.getElementById(div).style.display='block';document.getElementById(html).innerHTML=request.responseText;
}}
</script>

но успеха это не принесло :(
А именно, я задавал, скажем, параметр start от 0 до 49 с шагом 5, и он мне выводил только результат 45-49, а не все 0-49...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
сообщение 14.4.2010, 12:12; Ответить: Alcorn
Сообщение #9


[php]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<title></title>
<script>
x=0;
function update(x) {
req_s=new XMLHttpRequest();
req_s.open('POST','check.php?id='+x,true);
req_s.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req_s.onreadystatechange = function() {
if (req_s.readyState == 4 && req_s.status == 200) result(req_s.responseText);
}
req_s.send('');
}
function result(s) {
document.getElementById('data').innerHTML=s;
update(x+5); // увеличиваем на 5 и вызываем снова
}
window.onload=function() { update(0); }
</script>
</head>
<body>
<div id="data"></div> <!-- сюда вставляются пришедшие данные -->
</body>
</html>
[/php]
Код не проверял, если что подстроите под себя сами. И цикл нужно прекратить по кодовому слову с сервера.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
1nSane
1nSane
Topic Starter сообщение 21.4.2010, 2:14; Ответить: 1nSane
Сообщение #10


Не работало пока не сделал Number(x)+5 :)
А вообще, перекроил сильно, подогнав под то, что было...
Так как у меня запрос к БД, то я передаю start=0,end=мах_кол-во
в JS сравниваем start и end, start идет дальше, в УРЛ (ГЕТом), а енд - никуда...
Главное что я вычитал в примере, куда правильно вставлять вызов самого себя скрипта ;)

Спасибо за подсказку!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44765 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыЗапуск и раскрутка YOUTUBE-канала
найди клиента в ТОП-1 социальной видео сети
7 Porsche 2268 23.3.2023, 17:34
автор: distrib095
Открытая тема (нет новых ответов) Ищу специалиста Wordpress/PHP/JS/AJAX
5 by_roXe 4283 4.11.2018, 17:09
автор: kikimora17
Открытая тема (нет новых ответов) uBar.biz - инсталлы без меток, до 19 рублей за РФ запуск
9 Websharks 5183 17.10.2017, 17:36
автор: Websharks
Открытая тема (нет новых ответов) Запуск CJ,Tube и др. услуги от студии ArtDesignXXX.com
5 carloswm 5472 26.10.2016, 18:29
автор: carloswm


 



RSS Текстовая версия Сейчас: 28.3.2024, 22:23
Дизайн