voliuf.narod.ru

главная

друзья

помощь сайту

Основы программирования на JavaScript

Бесплатные учебники по темам

Партнерская программа

1.Язык сценариев JavaScript

2.Операторы и функции

3.Формы и циклы

4.Функции и концепция объектов

5.Строки, числа и массивы

6.Объектная модель документа

7.Объект документа и объект окна

8.Основы объектно-ориентированного программирования

9.Наследование и замыкание

10.Основы приложений AJAX

11.Обработка ошибок в JavaScript

12.Рекурсия

Дополнительные материалы
Краткое руководство по AJAX
Учебное руководство по XHTML

 

Основы программирования на JavaScript
Краткое руководство по AJAX
  

Технология AJAX является не новым языком программирования, а просто новым способом использования существующих стандартов.

 

С помощью AJAX можно создавать Web-приложения, которые будут лучше, быстрее и удобнее для пользователей, чем существующие.

 

AJAX основывается на JavaScript и запросах HTTP.

 

AJAX = Асинхронный JavaScript и XML

AJAX является сокращением от "Asynchronous JavaScript And XML" (Асинхронный JavaScript и XML).

 

AJAX является не новым языком программирования, а просто новым способом создания Web-приложений, которые будут лучше, быстрее, и более интерактивными.

 

AJAX использует JavaScript для отправки и получения данных при взаимодействии Web-браузера и Web-сервера.

 

Технология AJAX делает Web-страницы более гибкими и быстро реагирующими, осуществляя обмен данными с Web-сервером в фоновом режиме, а не перезагружая всю Web-страницу всякий раз, когда пользователь делает изменение.

 

AJAX является технологией браузера

AJAX является технологией, которая выполняется в браузере клиента. Она использует асинхронную передачу данных (запросы HTTP) между браузером и Web-сервером, позволяя Web-страницам запрашивать с сервера небольшие объемы данных вместо целых страниц.

 

Эта технология позволяет уменьшить объем приложений Интернет, сделать их более быстрыми и более удобными для пользователей.

 

AJAX является технологией Web-браузера, которая не зависит от программного обеспечения Web-сервера.

 

AJAX основан на открытых стандартах

AJAX использует следующие открытые стандарты:

 

JavaScript

 

XML

 

HTML

 

CSS

 

Используемые в AJAX открытые стандарты строго определены и поддерживаются всеми основными браузерами. Приложения AJAX не зависят от используемых браузеров и платформ.

 

Технология AJAX улучшает приложения Интернет

Web-приложения имеют множество преимуществ при сравнении с традиционными приложениями настольных компьютеров. Они имеют более обширную аудиторию, их легче устанавливать и поддерживать, и их легче разрабатывать.

 

Однако приложения Интернет не всегда бывают достаточно "богаты" свойствами и удобны для использования по сравнению с традиционными приложениями.

 

С помощью AJAX приложения Интернет можно сделать богаче (меньше, быстрее, и легче в использовании).

 

AJAX можно использовать прямо сейчас

Нет ничего нового, что требует изучения.

 

Технология AJAX основывается на открытых стандартах. Эти стандарты использовались множеством разработчиков многие годы.

 

Большинство существующих Web-приложений можно легко переписать с помощью технологии AJAX вместо традиционных форм HTML.

 

AJAX использует XML и запросы HTTP

Традиционное Web-приложение посылает введенные данные на Web-сервер (используя форму HTML). После обработки данных Web-сервер возвращает пользователю совершенно новую Web-страницу.

 

Так как сервер возвращает новую Web-страницу всякий раз, когда пользователь посылает данные на сервер, то традиционное Web-приложение часто выполняется медленно и оказывается менее удобным для пользователя.

 

С помощью AJAX Web-приложения могут посылать и получать данные без перезагрузки всей Web-страницы. Это делается с помощью запросов HTTP, посылаемых на сервер (в фоновом режиме), и модификации только отдельных частей Web-страницы с помощью JavaScript, когда сервер возвращает данные.

 

XML используется обычно в качестве формата для получения данных сервера, хотя можно использовать любой формат, включая обычный текст.

 

Как это делается, будет показано далее в этом кратком руководстве.

 

Пример использования AJAX

Технологию AJAX можно использовать для создания приложений с большими интерактивными возможностями.

 

Пример AJAX

В следующем примере приложения AJAX показано, как Web-страница может оперативно общаться с Web-сервером, когда пользователь вводит данные в Web-форму.

 

Описание примера

На странице выводится поле ввода с предложением ввести имя. Когда пользователь начинает вводить в этом поле имя, ниже появляются возможные варианты имен.

 

Форма HTML

Пусть на Web-странице имеется форма HTML со следующим кодом:

 
<form>
Имя:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Советуем: <span id="txtHint"></span></p>

Как можно видеть, это простая форма HTML с полем ввода с именем "txt1".

 

Атрибут события этого поля ввода определяет функцию, которая будет запускаться при возникновении события onkeyup.

 

Параграф ниже формы содержит тег span с именем "txtHint". Тег span используется в качестве поля для подстановки данных, получаемых с Web-сервера.

 

Когда пользователь вводит данные, выполняется функция с именем "showHint()". Выполнение функции запускается событием "onkeyup". Другими словами, всякий раз, когда пользователь убирает свой палец с клавиатуры внутри поля ввода (отпускает нажатую клавишу), вызывается функция showHint.

 

Функция showHint()

Функция showHint() является очень простой функцией JavaScript, помещенной в раздел заголовка <head> страницы HTML.

 

Функция имеет следующий код:

 
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML=""
return
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
var url="gethint.asp"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

Функция выполняется всякий раз, когда в поле ввода вводится символ.

 

Если имеется какой-то ввод в текстовое поле (str.length > 0), то функция выполняет следующее:

 
  • Определяет url (имя файла) для отправки на сервер
  • Добавляет к url параметр (q) с содержимым поля ввода
  • Добавляет случайное число, чтобы сервер не использовал кэшированный файл
  • Создает объект XMLHTTP, и приказывает объекту выполнить функцию с именем stateChanged, когда произойдет изменение.
  • Открывает объект XMLHTTP с заданным url.
  • Посылает запрос HTTP на сервер
 

Если поле ввода будет пустым, то функция просто очищает содержимое поля для подстановки txtHint.

 

Функция stateChanged()

Функция stateChanged() содержит следующий код:

 
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

Функция stateChanged() выполняется всякий раз, когда изменяется состояние объекта XMLHTTP.

 

Когда состояние будет равно 4 (или "complete"), поле для подстановки txtHint получает содержимое текста пришедшего ответа.

 

Браузеры AJAX

Приложения AJAX могут выполняться только в Web-браузерах с поддержкой XML.

 

Поддержка AJAX браузерами

Приложения AJAX могут выполняться только в Web-браузерах с полной поддержкой XML, т.е. всеми основными современными браузерами.

 

Предыдущий пример вызывает функцию с именем GetXmlHttpObject.

 

Эта функция предназначена для решения проблемы создания различных объектов XMLHTTP для различных браузеров.

 

Функция имеет следующий код:

 
function GetXmlHttpObject(handler)
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

Исходный код приложения AJAX

Далее показан полный исходный код рассмотренного выше примера AJAX.

 

Страница HTML для примера AJAX

Эта страница HTML содержит простую форму HTML и ссылку на файл JavaScript.

 
<html>
<head>
<script src="clienthint.js"></script>
</head>
<body>
<form>
Имя:
<input type="text" id="txt1"
onkeyup="showHint(this.value)">
</form>
<p>Советуем: <span id="txtHint"></span></p>
</body>
</html>

Код JavaScript приложения AJAX

Это код JavaScript, который находится в файле "clienthint.js":

 
var xmlHttp

function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML=""
return
}
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
var url="gethint.asp"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

Далее речь пойдет о серверной странице AJAX.

 

Серверные страницы AJAX для ASP и PHP

Сервера AJAX не существует.

 

Страницы AJAX может обрабатывать любой сервер Интернет.

 

Серверная страница AJAX - ASP и PHP

Серверная страница, вызываемая сценарием JavaScript в рассматриваемом примере, является простым файлом ASP с именем "gethint.asp".

 

Ниже представлены два примера кода серверной страницы, один, написанный на ASP, а другой – на PHP.

 

Пример AJAX на ASP

Код на странице "gethint.asp" написан на VBScript для Информационного сервера Интернет (IIS). Он просто проверяет массив имен и возвращает клиенту подходящие имена:

 
<%
dim a(30)
'Заполнение массива именами
a(1)="Anna"
a(2)="Brittany"
a(3)="Cinderella"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gunda"
a(8)="Hege"
a(9)="Inga"
a(10)="Johanna"
a(11)="Kitty"
a(12)="Linda"
a(13)="Nina"
a(14)="Ophelia"
a(15)="Petunia"
a(16)="Amanda"
a(17)="Raquel"
a(18)="Cindy"
a(19)="Doris"
a(20)="Eve"
a(21)="Evita"
a(22)="Sunniva"
a(23)="Tove"
a(24)="Unni"
a(25)="Violet"
a(26)="Liza"
a(27)="Elizabeth"
a(28)="Ellen"
a(29)="Wenche"
a(30)="Vicky"
'извлечение параметра q из URL
q=ucase(request.querystring("q"))
'поиск всех рекомендаций из массива, если длина q>0
if len(q)>0 then
  hint=""
  for i=1 to 30
    if q=ucase(mid(a(i),1,len(q))) then
      if hint="" then
        hint=a(i)
      else
        hint=hint & " , " & a(i)
      end if
    end if
  next
end if
'Вывод "нет предложений" если рекомендуемого имени не найдено
'или вывод подходящих значений
if hint="" then
  response.write("нет предложений")
else
  response.write(hint)
end if
%>

Пример AJAX на PHP

Приведенный выше код переписан на PHP.

 

Примечание: Чтобы выполнить весь пример на PHP, не забудьте изменить значение переменной url в "clienthint.js" с "gethint.asp" на "gethint.php".

 

Пример PHP

<?php
// Заполняем массив именами
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//извлечение параметра q из URL
$q=$_GET["q"];
//поиск всех рекомендаций в массиве, если длина q>0
if (strlen($q) > 0)
{
  $hint="";
  for($i=0; $i<count($a); $i++)
  {
  if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
    {
    if ($hint=="")
      {
      $hint=$a[$i];
      }
    else
      {
      $hint=$hint." , ".$a[$i];
      }
    }
  }
}

// Вывод "нет предложений", если рекомендаций не найдено
// или вывод подходящих значений
if ($hint == "")
{
$response="нет предложений";
}
else
{
$response=$hint;
}

//вывод ответа
echo $response;
?>

Пример AJAX c базой данных

AJAX можно использовать для интерактивного взаимодействия с базой данных.

 

Пример AJAX с базой данных

В следующем примере приложения AJAX будет показано, как Web-страница может извлекать информацию из базы данных с помощью технологии AJAX.

 

Описание примера:

На Web-странице выводится список выбора с именами клиентов.

 

При выборе любого клиента на странице выводится связанная

 

с ним информация из базы данных

 

Разбор примера AJAX с базой данных

Описанный выше пример страницы содержит простую форму HTML и ссылку на сценарий JavaScript:

 
<html>
<head>
<script src="selectcustomer.js"></script>
</head>
<body>
<form>
Выберите заказчика:
<select name="customers" onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste
<option value="NORTS ">North/South
<option value="WOLZA">Wolski Zajazd
</select>
</form>
<p>
<div id="txtHint"><b>Информация о заказчике будет выводиться здесь.</b></div>
</p>
</body>
</html>

Как можно видеть, это просто форма HTML с раскрывающимся списком с названием "customers".

 

Параграф ниже формы содержит тег div с именем "txtHint". Тег div используется в качестве поля для заполнения получаемой с Web-сервера информацией.

 

Когда пользователь выбирает данные (имя заказчика), выполняется функция "showCustomer()". Выполнение функции запускается событием "onchange". Другими словами, каждый раз, когда пользователь изменяет значение в поле раскрывающегося списка, вызывается функция showCustomer.

 

Код JavaScript показан далее.

 

Код JavaScript приложения AJAX

Следующий далее код JavaScript находится в файле "selectcustomer.js":

 
var xmlHttp

function showCustomer(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
var url="getcustomer.asp"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

Серверная страница приложения AJAX

Серверная страница, вызываемая сценарием JavaScript, является просто файлом ASP file с именем "getcustomer.asp".

 

Страница написана на VBScript для Информационного сервера Интернет (IIS). Ее можно легко переписать на PHP, или любой другой серверный язык.

 

Код выполняет команды SQL на базе данных и возвращает результат в виде таблицы HTML:

 
sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="
sql=sql & request.querystring("q")

set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("/db/northwind.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
rs.Open sql, conn

response.write("<table>")
do until rs.EOF
for each x in rs.Fields
response.write("<tr><td><b>" & x.name & "</b></td>")
response.write("<td>" & x.value & "</td></tr>")
next
rs.MoveNext
loop

response.write("</table>")

Пример использования AJAX c XML

AJAX можно использовать для интерактивного взаимодействия с файлом XML.

 

Пример использования AJAX c XML

В следующем далее примере приложения AJAX показано, как Web-страница может извлекать информацию из файла XML с помощью технологии AJAX.

 

Описание примера

На Web-странице выводится список выбора с именами исполнителей музыкальных произведений. При выборе исполнителя на странице появляется информация с описанием компакт-диска с записями этого музыканта.

 

Разбор примера AJAX с использованием XML

Рассматриваемый пример содержит простую форму HTML и ссылку на код JavaScript:

 
<html>
<head>
<script src="selectcd.js"></script>
</head>
<body>
<form>
Выберите компакт-диск:
<select name="cds" onchange="showCD(this.value)">
<option value="Bob Dylan">Bob Dylan</option>
<option value="Bonnie Tyler">Bonnie Tyler</option>
<option value="Dolly Parton">Dolly Parton</option>
</select>
</form>
<p>
<div id="txtHint"><b>Здесь выводится информация о компакт-диске.</b></div>
</p>
</body>
</html>

Как можно видеть, это простая форма HTML с простым раскрывающимся списком выбора с именем "cds".

 

Параграф ниже формы содержит тег div с именем "txtHint". Тег div используется в качестве поля для заполнения информацией, получаемой с Web-сервера.

 

Когда пользователь делает свой выбор, выполняется функция с именем "showCD". Выполнение функции запускается событием "onchange". Другими словами, каждый раз, когда пользователь изменяет значение в поле раскрывающегося списка, вызывается функция showCD.

 

Код JavaScript показан далее.

 

Код JavaScript приложения AJAX

Следующий далее код JavaScript находится в файле "selectcd.js":

 
var xmlHttp

function showCD(str)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Браузер не поддерживает запросы HTTP")
return
}
var url="getcd.asp"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject()
{
var objXMLHttp=null
if (window.XMLHttpRequest)
{
objXMLHttp=new XMLHttpRequest()
}
else if (window.ActiveXObject)
{
objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
return objXMLHttp
}

Серверная страница приложения AJAX

Серверная страница, вызываемая кодом JavaScript, будет простым файлом ASP с именем "getcd.asp".

 

Страница написана на VBScript для Информационного сервера Интернет (IIS). Ее можно легко переписать на PHP, или любом другом серверном языке.

 

Код выполняет запрос на файле XML и возвращает результат в виде HTML.

 
q=request.querystring("q")

set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load(Server.MapPath("cd_catalog.xml"))

set nodes=xmlDoc.selectNodes("CATALOG/CD[ARTIST='" & q & "']")

for each x in nodes
for each y in x.childnodes
response.write("<b>" & y.nodename & ":</b> ")
response.write(y.text)
response.write("<br />")
next
next

Объект AJAX XMLHttpRequest

Объект XMLHttpRequest делает возможной технологию AJAX.

 

Объект XMLHttpRequest

Чтобы создавать Web-приложения AJAX, необходимо хорошо знать объект JavaScript, называемый XMLHttpRequest.

 

Объект XMLHttpRequest является ключевым понятием технологии AJAX. Он был доступен с момента появления в июле 2000 браузера Internet Explorer 5.5, но не был полностью понят до 2005 года, когда начались разговоры об AJAX и Web 2.0.

 

Ниже представлены некоторые методы и свойства этого объекта, с которыми необходимо быть знакомым.

 

Создание объекта XMLHttpRequest

Различные браузеры используют для создания объекта XMLHttpRequest различные методы.

 

Internet Explorer использует ActiveXObject.

 

Другие браузеры используют встроенный в JavaScript объект, называемый XMLHttpRequest.

 

Вот простейший код, который можно использовать, чтобы обойти эту проблему.

 
var XMLHttp=null

if (window.XMLHttpRequest)
  {
  XMLHttp=new XMLHttpRequest()
  }
else if (window.ActiveXObject)
  {
  XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  }

Разбор приведенного примера

Сначала создается переменная XMLHttp для использования в качестве объекта XMLHttpRequest. Ее значение задается как null.

 

Затем проверяется, доступен ли объект window.XMLHttpRequest. Этот объект доступен в более новых версиях браузеров, таких как Firefox, Mozilla, и Opera.

 

Если объект доступен, то он используется для создания нового объекта.

 
XMLHttp=new XMLHttpRequest().

Если он не доступен, то проверяется, доступен ли объект window.ActiveXObject. Этот объект будет доступен в браузере Internet Explorer версии 5.5 и выше.

 

Если этот объект доступен, то он используется для создания нового объекта:

 
XMLHttp=new ActiveXObject().

Еще пример?

Некоторые программисты предпочтут использовать самую новую и быструю версию объекта XMLHttpRequest.

 

Следующий пример пытается использовать самую последнюю версию объекта "Msxml2.XMLHTTP" компании Microsoft, доступную в Internet Explorer 6, прежде чем обратиться к объекту "Microsoft.XMLHTTP", доступному в Internet Explorer 5.5 и выше.

 
var XMLHttp=null
try
{
XMLHttp=new ActiveXObject("Msxml2.XMLHTTP")
}
catch(e)
 {
 try
 {
 XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
 }
}

if (XMLHttp==null)
{
XMLHttp=new XMLHttpRequest()
}

Разбор приведенного примера

Сначала создается переменная XMLHttp для использования в качестве объекта XMLHttpRequest. Ее значение задается как null.

 

Затем делается попытка создания объекта способом компании Microsoft, доступным в Internet Explorer 6 и более поздних версиях:

 
XMLHttp=new ActiveXObject("Msxml2.XMLHTTP")

Если это порождает ошибку, то используется старый способ (Internet Explorer 5.5):

 
XMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

Если XMLHttp по прежнему имеет значение null, то делается попытка создания объекта "стандартным" способом:

 
XMLHttp=new XMLHttpRequest()

Методы объекта XMLHttpRequest

Метод open()

 

Метод open() создает запрос для Web-сервера.

 

Метод send()

 

Метод send() посылает запрос серверу.

 

Метод abort()

 

Метод abort() отменяет текущий запрос к серверу.

 

Свойство readyState объекта XMLHttpRequest

Свойство readyState определяет текущее состояние объекта XMLHttpRequest.

 

В таблице показаны возможные значения свойства readyState:

 
Состояние Описание
0 Запрос не инициализирован
1 Запрос создан
2 Запрос послан
3 Запрос обрабатывается
4 Запрос завершен
 

readyState=0 после создания объекта XMLHttpRequest, но до вызова метода open().

 

readyState=1 после вызова метода open(), но до вызова метода send().

 

readyState=2 после вызова метода send().

 

readyState=3 после того, как браузер соединится с сервером, но до завершения сервером ответа.

 

readyState=4 после завершения запроса и полного получения всех данных ответа с сервера.

 

Различные браузеры используют свойство состояния готовности по-разному. Не стоит рассчитывать, что все браузеры будут сообщать обо всех состояниях. Некоторые не сообщают о состоянии 0 и 1.

 

Для приложений AJAX представляет интерес фактически только состояние 4. Те есть, когда запрос завершен, и можно использовать полученные данные.

 

Свойство responseText объекта XMLHttpRequest

Свойство responseText содержит присланный сервером текст.

 
Автор: М. Кан   источник: http://www.INTUIT.ru 


 

13 центов(0,13$) за клик, выплаты через WebMoney каждый вторник +10% с рефералов

Мы выкупаем 100% трафа! $12 за 1000 хостов (РФ), и до $4 за 1000 хостов (зарубежный траф) + 10% с дохода Ваших рефералов!
 Выплаты через
WebMoney

~80-100$ за1000 хостов 2.5$ за 1 смс.
реф. процент - 10 %Выплаты происходят раз в неделю, в четверг на
WebMoney
 
 

 

____________________________

Посмотреть порно видео в онлайне »

_______________________________

 

   
   
Сайт управляется системой uCoz