Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите разобраться с Ajax...
 
 автор: Dimka31   (17.11.2007 в 18:34)   письмо автору
 
 

Начал изучать Ajax сразу же возникло множество трудностей и непониманий.
Ни как не могу понять, как работает Ajax приложение.

Вот что я понял:
1) для ассинхроной передачи запросов серверу, в большинстве случаев создается экземпляр объекта XMLHttpRequest
2) передача запроса серверу, в ответ на передачу сервер сгенирирует нам данные (не могу понять, нужно создовать приложение которое будет генерировать эти данные, и при передаче запроса указывать ссылку на это приложение?)
3) потом когда данные сгенерированы они отправляются клиенту, и функция обратного вызова window.onload или window.onreadystatechange получает эти данные. (а как эти данные использывать?)

Дальнейшие изучение даеться еще тяжелее, пока не пойму вот этого, думаю дальше двигаться бесполезно, помогите разобраться...

Заранее благодарен

   
 
 автор: bronenos   (17.11.2007 в 20:16)   письмо автору
 
   для: Dimka31   (17.11.2007 в 18:34)
 

1. да
2. ответ сервера - все то, что приходит в браузер, например... (текст на странице между ?> и <?, а также то что выведено print и echo...) короче, весь вывод - и есть ответ
3. направляются обратно и обрабатываются так
var xmlHttp = new XMLHttpRequest();

xmlHttp.onreadystatechange = function()
{
  if (xmlHttp.readyState < 4) return;
  alert("Ответ получен: " + xmlHttp.responseText);
}

   
 
 автор: Dimka31   (17.11.2007 в 23:17)   письмо автору
 
   для: bronenos   (17.11.2007 в 20:16)
 

ну хорошо, вроде что то понятно, а вот как проходит второй этап интересно?
мы посылаем запрос серверу, нужно же где то явно написать что мы что то посылаем, какие то параметры(например там ну не знаю запрос к базе данных или как?), а как сервер узнает что с этими данными делать?

   
 
 автор: bronenos   (17.11.2007 в 23:50)   письмо автору
 
   для: Dimka31   (17.11.2007 в 23:17)
 

серверу вы сами напишете, что и как ему принимать
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function()
{
  if (xmlHttp.readyState < 4) return;
  alert("Ответ: " + xmlHttp.responseText);
  xmlHttp = null;
}

xmlHttp.open("GET", "url.php", true);
xmlHttp.send("v1=p1&v2=p2....");

   
 
 автор: AlexSol   (17.11.2007 в 23:58)   письмо автору
 
   для: Dimka31   (17.11.2007 в 23:17)
 

скажем так, вы передаетефайлу php через аякс некие переменные со значением медом GET далее пишите стандартвый обработчик этих параметров ну и если нужно веводите результат работы скрипта через echo иловите аяксом.

   
 
 автор: Dimka31   (18.11.2007 в 00:08)   письмо автору
 
   для: AlexSol   (17.11.2007 в 23:58)
 

>если нужно веводите результат работы скрипта через echo иловите аяксом.

А каким образом ловим?

   
 
 автор: bronenos   (18.11.2007 в 00:44)   письмо автору
 
   для: Dimka31   (18.11.2007 в 00:08)
 

responseText лоаим
кстати я ошибся при написании
в случае гет нпло переменные вставлять через вопр. знак в адрес
я написал для поста значит

   
 
 автор: Dimka31   (18.11.2007 в 12:01)   письмо автору
 
   для: bronenos   (18.11.2007 в 00:44)
 

еще один вопрос, на этой основе можно передовать любые данные? Можно ли передать рисунок? или другой файл?

   
 
 автор: Dimka31   (18.11.2007 в 13:03)   письмо автору
 
   для: Dimka31   (18.11.2007 в 12:01)
 

можете подсказать что здесь не правильно


  <script>
  var req=null;
  function getXMLHTTPRequest()
  {
    var xRequest = null;
    if (window.XMLHttpRequest)
    {
      // Mozila/Safari
      xRequest = new XMLHttpRequest();  
    }
    else if (typeof ActiveXObject != "undefined")
    {
      xRequest = new ActiveXObject
      // Internet explorer
      ("Microsoft.XMLHTTP");
    }    
    return Xrequest;
  }
  function sendRequest(url, params, HttpMethod)
  {
    if (!HttpMethod)
    {
      HttpMethod = "GET";
    }
    req = getXMLHTTPRequest();
    if (req)
    {
      req.open(HttpMethod, url.php, true);
      req.send("v1=p1&v2=p2"); 
    }
  }
  req.onReadystatechange=function() 
  {
    if (req.readyState < 4) return; 
    alert("Ответ получен: " + req.responseText); 
  }
</script>

   
 
 автор: bronenos   (18.11.2007 в 13:24)   письмо автору
 
   для: Dimka31   (18.11.2007 в 13:03)
 

 <script> 
  var req=null; 
  function getXMLHTTPRequest() 
  { 
    var xRequest = null; 
    if (window.XMLHttpRequest) 
    { 
      // Mozila/Safari 
      xRequest = new XMLHttpRequest();   
    } 
    else if (typeof ActiveXObject != "undefined") 
    { 
      xRequest = new ActiveXObject 
      // Internet explorer 
      ("Microsoft.XMLHTTP"); 
    }     
    return xRequest; 
  } 
  function sendRequest(url, params, HttpMethod) 
  { 
    if (!HttpMethod) 
    { 
      HttpMethod = "GET"; 
    } 
    req = getXMLHTTPRequest(); 
    // Сначала присваиваем обработчик, потом уже совершаем другие действия
    req.onreadystatechange=function()  
    { 
      if (req.readyState < 4) return;  
      alert("Ответ получен: " + req.responseText);  
    } 
    if (req) 
    { 
      req.open(HttpMethod, url+".php", true); 
      req.send("v1=p1&v2=p2");  
    } 
  } 
</script>

   
 
 автор: Dimka31   (20.11.2007 в 15:10)   письмо автору
 
   для: bronenos   (18.11.2007 в 13:24)
 

ошибок вроде нет, но ничего не присылаеться, вернее сообщение не выводиться функцией alert();

   
 
 автор: bronenos   (20.11.2007 в 15:35)   письмо автору
 
   для: Dimka31   (20.11.2007 в 15:10)
 

как вызываете

   
 
 автор: Dimka31   (20.11.2007 в 15:48)   письмо автору
 
   для: bronenos   (20.11.2007 в 15:35)
 

содержимое файла url.php


<?php
  
echo "This is Ajax";
?>



всего скорей не выполняеться код

req.onreadystatechange=function()   
    {  
      if (req.readyState < 4) return;   
      alert("Ответ получен: " + req.responseText);   
    }  

   
 
 автор: bronenos   (20.11.2007 в 16:03)   письмо автору
 
   для: Dimka31   (20.11.2007 в 15:48)
 

как вызываете функцию

   
 
 автор: Dimka31   (20.11.2007 в 16:04)   письмо автору
 
   для: bronenos   (20.11.2007 в 16:03)
 

<script>  
  function rur()
  {
    var req=null;  
    function getXMLHTTPRequest()  
    {  
      var xRequest = null;  
      if (window.XMLHttpRequest)  
      {  
        // Mozila/Safari  
        xRequest = new XMLHttpRequest();    
      }  
      else if (typeof ActiveXObject != "undefined")  
      {  
        xRequest = new ActiveXObject  
        // Internet explorer  
        ("Microsoft.XMLHTTP");  
      }      
      return xRequest;  
    }  
    function sendRequest(url, params, HttpMethod)  
    {  
      if (!HttpMethod)  
      {  
        HttpMethod = "GET";  
      }  
      req = getXMLHTTPRequest();  
      // Сначала присваиваем обработчик, потом уже совершаем другие действия 
      req.onreadystatechange=function()   
      {  
        if (req.readyState < 4) return;   
        alert("Ответ получен: " + req.responseText);   
      }  
      if (req)  
      {  
        req.open(HttpMethod, url+".php", true);  
        req.send("v1=p1&v2=p2");   
      }  
    }  
  }
</script> 
  <input name='news' type='radio' onclick='rur()'>

   
 
 автор: RMW   (20.11.2007 в 16:21)   письмо автору
 
   для: Dimka31   (20.11.2007 в 16:04)
 

Функцию sendRequest вы, похоже, вызвать забыли.
sendRequest('url','','');

   
 
 автор: bronenos   (20.11.2007 в 16:32)   письмо автору
 
   для: Dimka31   (20.11.2007 в 16:04)
 

вынесите getXMLHTTPRequest и sendRequest вне функции
а эту сделайте так
function rur() { sendRequest("url"); }

   
 
 автор: Dimka31   (20.11.2007 в 16:51)   письмо автору
 
   для: bronenos   (20.11.2007 в 16:32)
 

отлично, я просто не много запутался, как ни как конец рабочего дня, голова кипит))) спасибо помогли...)))

   
 
 автор: Dimka31   (25.11.2007 в 20:42)   письмо автору
 
   для: bronenos   (20.11.2007 в 16:32)
 

Еще один вопрос.
В файле обработчике, как отлавливать переданные параметры, при использовании $_POST, $_GET выдает пустое значение, вернее ее отсутсвие. Как быть?

   
 
 автор: bronenos   (25.11.2007 в 22:20)   письмо автору
 
   для: Dimka31   (25.11.2007 в 20:42)
 

как отсылаете

   
 
 автор: wawilon   (26.11.2007 в 10:38)   письмо автору
 
   для: Dimka31   (20.11.2007 в 16:04)
 


req.send("v1=p1&v2=p2");   

вот в этой строке Вы передаете нужные вам переменные. Если переменных p1 и p2 нет (а в скрипте у Вас они больше не встречаются) то соответственно и в массиве $_GET Вы ничего не нейдете.

P.S. Гораздо правильнее было бы написать не явно

req.send("v1=p1&v2=p2");

А написать вместо этого

req.send(params);

А функцию sendRequest уже вызывать от нужных Вам параметров.

   
 
 автор: bronenos   (26.11.2007 в 11:13)   письмо автору
 
   для: wawilon   (26.11.2007 в 10:38)
 

при гет надо параметры ставить в .опен после вопр. знака

   
 
 автор: Dimka31   (27.11.2007 в 14:00)   письмо автору
 
   для: bronenos   (26.11.2007 в 11:13)
 

ну вот например у меня есть форма содержащие поле с именем login нужно передать его в параметрах файлу обработчику методом get
я бы сделал это так

var str = 'Login=' + document.all('login').value;
req.send(str); 



а в файле обработчике написал бы

<?php
  
if(isset($_GET['Login']))
  {
    
действия 
  

?>

   
 
 автор: bronenos   (27.11.2007 в 14:40)   письмо автору
 
   для: Dimka31   (27.11.2007 в 14:00)
 

req.open("GET", "page?Login="+encodeURICompoment(document.all.login.value), true);

   
 
 автор: Dimka31   (27.11.2007 в 20:12)   письмо автору
 
   для: bronenos   (27.11.2007 в 14:40)
 

Жалуеться на отсутсвии объекта.
Вот код:


<script language="javascript">
  var req=null;  
  function getXMLHTTPRequest()  
  {  
    var xRequest = null;  
    if (window.XMLHttpRequest)  
    {  
      // Mozila/Safari  
      xRequest = new XMLHttpRequest();    
    }  
    else if (typeof ActiveXObject != "undefined")  
    {  
      xRequest = new ActiveXObject  
      // Internet explorer  
      ("Microsoft.XMLHTTP");  
    }      
    return xRequest;  
  }  
 
   function sendRequest()  
   {  
      var HttpMethod = "GET";  
      req = getXMLHTTPRequest();  
      // Сначала присваиваем обработчик, потом уже совершаем другие действия 
      req.onreadystatechange=function()   
      {  
        if (req.readyState < 4) return;   
        alert("Ответ получен: " + req.responseText);   
      }  
      if (req)  
      {  
         req.open("GET", "url.php?login="+document.all('login').value, true);
         req.send(null);  
      }  
    }  
    
  function login() 
  {
    sendRequest();
  }
</script>
 
<input name='login' size=20>        
<input name="log" type="button" value="проверить" onClick="login();">        


Файл обработчик


<?php 
  
if(isset($_GET['login']))
  {
    include(
'config.php');
    
$login_q "Select FIO from `contacts` where FIO='".$_POST['Login']."'";
    
$query_status mysql_query($login_q);
    if(
mysql_num_rows($query_status)==0)
    {
      echo 
"К сожелению данный Login существует";
    }
   else
   {
    echo 
"Вы можете продолжить регистрацию";
   }
 }

?>

   
 
 автор: bronenos   (27.11.2007 в 22:39)   письмо автору
 
   для: Dimka31   (27.11.2007 в 20:12)
 

encodeURIComponent() надо обработать

   
 
 автор: Dimka31   (27.11.2007 в 23:12)   письмо автору
 
   для: bronenos   (27.11.2007 в 22:39)
 

всмысли а как это сделать?

   
 
 автор: bronenos   (27.11.2007 в 23:52)   письмо автору
 
   для: Dimka31   (27.11.2007 в 23:12)
 

 автор: bronenos   (27.11.2007 в 14:40)

   
 
 автор: Dimka31   (28.11.2007 в 00:06)   письмо автору
 
   для: bronenos   (27.11.2007 в 23:52)
 


req.open("GET", "url.php?login="+encodeURICompoment(document.all.login.value), true);


Выводит ошибку

Препологаеться наличие объекта

   
 
 автор: bronenos   (28.11.2007 в 00:42)   письмо автору
 
   для: Dimka31   (28.11.2007 в 00:06)
 

ие версии 5?
если да то http://vladgorod.ru/ajax/mirage.js

копируйте себе метод encode и испольуйте для кодирования

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования