Мне нужно заставить АЯКС работать в цикле. Т.Е. есть парсер который лежит на сервере.
Браузер посылает запрос при помощи АЯКС
1) отправка
2) прием полученного ответа от сервера (может занимать 4 с)
3) проверка значения, если все ок заново отправка!
Есть JS скрипт
<html>
<head>
<title>Парсер</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" language="javascript">
var parsing = {
from:0,
to:0,
number:0,
req: function(){
if(navigator.appName == "Microsoft Internet Explorer")
{
return new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
return new XMLHttpRequest();
}
},
}
parsing.Request = function(query){
this.req.open('post', 'parsing.php' , true );
this.req.onreadystatechange = this.Refresh;
this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
this.req.send(query);
}
parsing.Refresh = function(){
var a = this.req.readyState;
if( a == 4 )
{
var b = this.req.responseText;
var c = document.getElementById('ajax').value;
document.getElementById('ajax').innerHTML = b + <br/> + c;
this.number++;
if(this.number < this.to){
this.Pusk(this.number);
}
}
}
parsing.Pusk = function(number){
var query;
query ='value='+encodeURIComponent(number);
this.Request(query);
this.Refresh();
}
parsing.start = function(){
this.from = document.getElementById('from').value - 0;
this.to = document.getElementById('to').value - 0;
this.number = this.from;
this.Pusk(this.number);
}
</script>
</head>
<body>
От <input type='text' id="from"/> до <input type='text' id="to"/>
<input type="button" onClick="parsing.start()" value="старт"/><br />
<div id="ajax"></div>
</body>
</html>
но при запуске скрипта выдает ошибку
this.req.open is not a function
this.req.open('post', 'parsing.php' , true );
Спустя 2 минуты, 52 секунды (19.02.2012 - 13:22) redreem написал(а):
ну а что он должен написать если req - это функция, а вовсе не объект с полями, которые ты перечисляешь
Спустя 3 минуты (19.02.2012 - 13:25) kent666 написал(а):
redreem
а как тогда сделать что бы он воспринимал req как объект причем кроссбраузерно!?
а как тогда сделать что бы он воспринимал req как объект причем кроссбраузерно!?
Спустя 7 минут, 54 секунды (19.02.2012 - 13:33) redreem написал(а):
я вообще с трудом улавливаю что ты хотел "навертеть" своим кодом - "смешались в кучу кони, люди"...
вот седня жевали - http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1728576
возьми jQuery лучше попробуй прикрутить. с чистым httpXMLRequest запаришься отлаживать.
вот седня жевали - http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1728576
возьми jQuery лучше попробуй прикрутить. с чистым httpXMLRequest запаришься отлаживать.
Спустя 11 часов, 52 минуты, 11 секунд (20.02.2012 - 01:25) bodja написал(а):
Ох вы вы и мучаете этот аякс ,каждую вторую тему мусолим. :D
Раздаю мою заготовку по нему.
Яваскрипт
HTML
PHP
Результат
Раздаю мою заготовку по нему.
Яваскрипт
var ax;
try {
ax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
ax = false;
}
}
if (!ax && typeof XMLHttpRequest!='undefined') {
ax = new XMLHttpRequest();
}
function _(get,post,code) {
ax.open('post', get , true);
ax.onreadystatechange = function () {
if(ax.readyState == 4 ) {var data=ax.responseText;eval(code);}
}
ax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
ax.send(post);
}
HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX</title>
<script type="text/javascript" src="./script.js"></script>
</head>
<body>
<button onClick="_('./ajax.php?get1=111&get2=222','post1=111&post2=222','document.getElementById(\'text\').innerHTML=data;')">get</button>
<div id="text">text</div>
</body>
</html>
PHP
<?php
echo "ajax.php";
print_r($_GET);
print_r($_POST);
?>
Результат
Цитата |
ajax.phpArray ( [get1] => 111 [get2] => 222 ) Array ( [post1] => 111 [post2] => 222 ) |
Все ставим на сервер ,запускаем ,все должно работать.
Теперь по js
функции вызова аякса,
называется _(да ,так и называется :),нижний знак подчеркивания,ненравится переименовываем на свою).
Обьект аякса создается один раз,а не при каждом запросе,поэтому и вынесен за функцию.
Функция принимает три аргумента ,все в строковом выражении
первый - относительный путь+GET запросы ,например './ajax.php?get1=111&get2=222'
второй - POST запросы ,например 'post1=111&post2=222',если нет POST -пишем null
третий-код который выполнится после получения даных ,например 'document.getElementById(\'text\').innerHTML=data;'
в функции зарезервирована переменная с названием data в ней хранятся полученные данные,поэтому в третем аргументе можно сразу вызвать функцию при приеме данных и передать через нее полученные данные.Незабываем писать третий аргумент в качестве строки ,так как этот код будет выполнен только после того ,как получем данные.
Еще пример вызова
_('./text.txt',null,'alert(data)');
здесь обращаемся к файлу text.txt GET и POST не передаем ,при получени алерт нам выводит полученные данные.
_('./chat.php','name=Вася&msg=Прювет!','document.getElementById(\'content\').innerHTML=data;');
Здесь обращаемся к файлу chat.php передаем POST name и msg ,при получении ответа передаем данные в элемент "content"
Еще ,из за безопасности ,желательно указывать относительные пути .
Кодировка всех файлов UTF-8 ,иначе могут быть проблемы с кириллицей.
Локально без запуска сервера работает только IE6 ,с остальными только на сервере.
ЗЫ Я думаю вопросов по яваскриптовому аяксу больше не будет. :D
Спустя 2 минуты, 49 секунд (20.02.2012 - 01:28) m4a1fox написал(а):
bodja
Мини мануал получился...
Мини мануал получился...
Спустя 20 часов, 46 минут, 31 секунда (20.02.2012 - 22:15) kent666 написал(а):
Ребята поделюсь с вами решением своего вопроса (вообщем кому будет интересно)
В мое поставленной задаче циклического запуска я использовал не АСИНХРОННЫЙ метода а наоборот СИНХРОННЫЙ. Вот уж не думал где это может пригодиться :D
А вот именно использование синхронного АЯКСА
В мое поставленной задаче циклического запуска я использовал не АСИНХРОННЫЙ метода а наоборот СИНХРОННЫЙ. Вот уж не думал где это может пригодиться :D
<html>
<head>
<title>Парсер</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" language="javascript">
var parsing = {
from:0,
to:0,
number:0,
text: '',
}
parsing.Pusk = function(){
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
req.open('post', 'parsing.php' , false );
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send('value='+encodeURIComponent(this.number));
var a = req.readyState;
if( a == 4 )
{
var b = req.responseText;
this.text = b + '<br/>' + this.text;
document.getElementById('ajax').innerHTML = this.text;
this.number++;
if(this.number < (this.to + 1)){
this.Pusk(this.number);
}
}
}
parsing.start = function(){
this.from = document.getElementById('from').value - 0;
this.to = document.getElementById('to').value - 0;
this.number = this.from;
this.Pusk(this.number);
}
</script>
</head>
<body>
От <input type='text' id="from"/> до <input type='text' id="to"/>
<input type="button" onClick="parsing.start()" value="старт"/><br />
<div id="ajax"></div>
</body>
</html>
А вот именно использование синхронного АЯКСА
req.open('post', 'parsing.php' , [b]false[/b] );
Спустя 16 минут, 32 секунды (20.02.2012 - 22:31) bodja написал(а):
фича аякса ,что он Asynchronous Javascript and XML, а то что скрипт уйдет в ступор пока не примет данные при синхронном запросе - это уже зависит от ситуации.