Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение php с помощью ajax 
V
    Опции темы
jone31
  Дата 18.6.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Есть php скрипт - whois.php и он длительно обрабатывается(~30сек.) и что бы пользователь не "соскучился" хочу сделать так что бы когда пользователь кликнул по этой ссылке, появилась картинка loading.gif и php скрипт без перезагрузки страницы исполнился. 

пробовал реализовать так:
Форма:
Код
<script type="text/javascript" src="ajax.js"></script>
<form  method="post" id="whois-form">
<input type="text" id="domain" name="domain" />
<input type="button" onClick="whois();" value="Найти" />
</form>
<div id="whois-results"></div>


Вот ajax.js:
Код
function arn_ajax(file){
    this.AjaxFailedAlert = "AJAX not supported.\n";
    this.requestFile = file;
    this.method = "POST";
    this.URLString = "";
    this.encodeURIString = true;
    this.execute = false;
    this.add_html = false;
    this.loading_fired        = 0;
    this.centerdiv          = null;

    this.onLoading = function() { };
    this.onLoaded = function() { };
    this.onInteractive = function() { };
    this.onCompletion = function() { };

    this.onShow = function( message )
    {
        if ( ! this.loading_fired )
        {
            this.loading_fired = 1;
        
        if ( message )
        {
            document.getElementById( 'loading-layer-text' ).innerHTML = message;
        }
        
        this.centerdiv         = new center_div();
        this.centerdiv.divname = 'loading-layer';
        this.centerdiv.move_div();
        }
        
        return;
    };

    this.onHide = function()
    {
        try
        {
            if ( this.centerdiv && this.centerdiv.divobj )
            {
                this.centerdiv.clear_div();
            }
        }
        catch(e)
        {
        }
    
        this.loading_fired = 0;
    
        return;
};


    this.createAJAX = function() {
        try {
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (err) {
                this.xmlhttp = null;
            }
        }
        if(!this.xmlhttp && typeof XMLHttpRequest != "undefined")
            this.xmlhttp = new XMLHttpRequest();
        if (!this.xmlhttp){
            this.failed = true; 
        }
    };
    
    this.setVar = function(name, value){
        if (this.URLString.length < 3){
            this.URLString = name + "=" + value;
        } else {
            this.URLString += "&" + name + "=" + value;
        }
    };
    
    this.encVar = function(name, value){
        var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
    return varString;
    };
    
    this.encodeURLString = function(string){
        varArray = string.split('&');
        for (i = 0; i < varArray.length; i++){
            urlVars = varArray[i].split('=');
            if (urlVars[0].indexOf('amp;') != -1){
                urlVars[0] = urlVars[0].substring(4);
            }
            varArray[i] = this.encVar(urlVars[0],urlVars[1]);
        }
    return varArray.join('&');
    };

    this.encodeVAR = function(url){
        url = url.toString();
        url = url.replace(/\+/g, "%2B");
        url = url.replace(/\=/g, "%3D");
        url = url.replace(/\?/g, "%3F");
        url = url.replace(/\&/g, "%26");    
      return url;

    };
    
    this.runResponse = function(){

                        var milisec = new Date;
                        var jsfound = false;
                        milisec = milisec.getTime();

                        var js_reg = /<script.*?>(.|[\r\n])*?<\/script>/ig;

                        var js_str = js_reg.exec(this.response);
                        if (js_str != null) {

                        var js_arr = new Array(js_str.shift());
                        var jsfound = true;
        
                        while(js_str) {
                                js_str = js_reg.exec(this.response);
                                if (js_str != null) js_arr.push(js_str.shift());
                        }

                          for(var i=0; i<js_arr.length;i++) {
                                this.response = this.response.replace(js_arr[i],'<span id="'+milisec+i+'" style="display:none;"></span>');
                          }
                        }
                            if ( this.add_html ) {
                                this.elementObj.innerHTML += this.response; 
                            } else {
                                this.elementObj.innerHTML = this.response; 
                            }

                        if (jsfound) {

                        var js_content_reg = /<script.*?>((.|[\r\n])*?)<\/script>/ig;

                        for (i = 0; i < js_arr.length; i++) {
                                var mark_node = document.getElementById(milisec+''+i);
                                var mark_parent_node = mark_node.parentNode;
                                mark_parent_node.removeChild(mark_node);
                                
                                js_content_reg.lastIndex = 0;
                                var js_content = js_content_reg.exec(js_arr[i]);
                                var script_node = mark_parent_node.appendChild(document.createElement('script'));
                                script_node.text = js_content[1];  

                                var script_params_str = js_arr[i].substring(js_arr[i].indexOf(' ',0),js_arr[i].indexOf('>',0));
                                var params_arr = script_params_str.split(' ');

                                if (params_arr.length > 1) {
                                   for (var j=0;j< params_arr.length; j++ )        {
                                        
                                        if(params_arr[j].length > 0){
                                                var param_arr = params_arr[j].split('=');
                                                param_arr[1] = param_arr[1].substr(1,(param_arr[1].length-2));
                                                script_node.setAttribute(param_arr[0],param_arr[1]);
                                        }

                                  }
                                }

                          }
                        }
    };


    
    this.sendAJAX = function(urlstring){
        this.responseStatus = new Array(2);
        if(this.failed && this.AjaxFailedAlert){ 
            alert(this.AjaxFailedAlert); 
        } else {
            if (urlstring){ 
                if (this.URLString.length){
                    this.URLString = this.URLString + "&" + urlstring; 
                } else {
                    this.URLString = urlstring; 
                }
            }
            if (this.encodeURIString){
                var timeval = new Date().getTime(); 
                this.URLString = this.encodeURLString(this.URLString);
                this.setVar("rndval", timeval);
            }
            if (this.element) { this.elementObj = document.getElementById(this.element); }
            if (this.xmlhttp) {
                var self = this;
                if (this.method == "GET") {
                    var totalurlstring = this.requestFile + "?" + this.URLString;
                    this.xmlhttp.open(this.method, totalurlstring, true);
                } else {
                    this.xmlhttp.open(this.method, this.requestFile, true);
                }
                if (this.method == "POST"){
                    try {
                        this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');  
                    } catch (e) {}
                }

                this.xmlhttp.send(this.URLString);
                this.xmlhttp.onreadystatechange = function() {
                    switch (self.xmlhttp.readyState){
                        case 1:
                            self.onLoading();
                        break;
                        case 2:
                            self.onLoaded();
                        break;
                        case 3:
                            self.onInteractive();
                        break;
                        case 4:
                            self.response = self.xmlhttp.responseText;
                            self.responseXML = self.xmlhttp.responseXML;
                            self.responseStatus[0] = self.xmlhttp.status;
                            self.responseStatus[1] = self.xmlhttp.statusText;
                            self.onHide();
                            self.onCompletion();
                            if (self.elementObj) {
                                var elemNodeName = self.elementObj.nodeName;
                                elemNodeName = elemNodeName.toLowerCase();
                                if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
                                    if (self.response == 'error') { alert('Access denied'); } else {
                                    if ( self.add_html ) {
                                    self.elementObj.value += self.response;
                                    } else { self.elementObj.value = self.response;}
                                    }
                                } else {
                                    if (self.response == 'error') { alert('Access denied'); } else {
                                    if(self.execute) { self.runResponse(); } else {
                                        if ( self.add_html ) {

                                           self.elementObj.innerHTML += self.response;

                                        } else    { self.elementObj.innerHTML = self.response; }
                                      }
                                    }
                                }
                            }
                            self.URLString = "";
                        break;
                    }
                };
            }
        }
    };
this.createAJAX();
};

function whois()
    {
        var ajax = new dle_ajax();
        var domen = ajax.encodeVAR( document.getElementById('whois-form').domain.value );
        ajax.onShow ('');
        var varsString = "domen=" + domen;
        ajax.requestFile = "whois.php";
        ajax.method = 'POST';
        ajax.element = 'whois-results';
        ajax.sendAJAX(varsString);
        return false;
    };


Но ничего так не работает. А как картинку прикрутить нигде не нашел.

Подскажите что там не так???

Это сообщение отредактировал(а) jone31 - 18.6.2009, 16:40
PM MAIL   Вверх
jone31
  Дата 19.6.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



ну кто нибудь, помогите найти ошибку
PM MAIL   Вверх
BrainWorker
Дата 19.6.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 9.8.2007
Где: Дубна, Россия

Репутация: нет
Всего: 2



Код

<script type="text/javascript" src="ajax.js"></script>

<form  method="post" id="whois-form">
   <input type="text" id="domain" name="domain" />
   <input type="button" onClick="whois();" value="Найти" />
</form>
<img id="img_loading" src="loading.gif" style="display: none" />
<div id="whois_results"></div>


ajax.js
Код


function createXMLHttpRequest()
{
   var request = false;
   // branch for native XMLHttpRequest object
   if (window.XMLHttpRequest)
   {
      try
      {
         request = new XMLHttpRequest();
      }
      catch(e)
      {
         request = false;
      }
   }
   // branch for IE/Windows ActiveX version
   else if (window.ActiveXObject)
   {
      try
      {
         request = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e)
      {
         try
         {
            request = new ActiveXObject("Microsoft.XMLHTTP");
         }
         catch(e)
         {
            request = false;
         }
      }
   }
   return request;
}

//##################################################################################################

function callServer (method, url, data, dataType, handler, arg)
{
   if (!method) method = 'GET';
   var request = createXMLHttpRequest();
   if (request == false)
      return true;

   request.onreadystatechange =
      function()
      {
         if (request.readyState == 4)
         {
            handler (arg, request.responseText, request.responseXML, request.status, request.statusText);
            request = null;   // чтобы не было утечки памяти в IE
         }
      };
      
   request.open(method, url, true);
   if (data)
   {
      if (!dataType) dataType = 'application/xml';
      isMozilla = (navigator.userAgent.match(/\bGecko\b/));
      // in Mozilla XML always serialized as UTF-8
      if ( (typeof(data) != "string") && (dataType.indexOf("charset=") < 0) && (isMozilla))
         dataType = dataType + ';charset=utf-8';
      request.setRequestHeader('Content-Type', dataType);
   }
   request.send(data);
   return false;
}

//##################################################################################################

function whois (... данные формы ...)
{
   document.getElementById ("img_loading").style.display = "inline";
   callServer ("POST", <url скрипта>, <данные в формате var1=value1@var2=value2@...>,  "", handler, arg);
}

function handler (arg, responseText, responseXML, status, statusText)
{
   document.getElementById ("img_loading").style.display = "none";
   ... обработка резульатата с загрузкой данных в whois_results
}


PM MAIL Jabber   Вверх
jone31
  Дата 19.6.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Цитата(BrainWorker @  19.6.2009,  13:53 Найти цитируемый пост)
callServer ("POST", <url скрипта>, <данные в формате var1=value1@var2=value2@...>,  "", handler, arg);


что за данные?
PM MAIL   Вверх
jone31
  Дата 19.6.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



вообщем я написал так:
вот php скрипт:
Код
$what = $_POST['domain'];

$open = @file_get_contents("....................., "r");
    $quote = ('...........');
    preg_match_all($quote,$open,$out);
    for($i = 0; $i < count($out[1]); $i++)
    {
    $bash = "".$out[1][$i]."";
    }
    echo $bash

А в ajax.js
Код

............
function whois ()
{
   document.getElementById ("img_loading").style.display = "inline";
   var domen = document.getElementById('whois-form').domain.value;
   callServer ("POST", "whois.php", "domain=" + domain,  null, handler, arg);
}.................


Но он просто показывает лоадер и все. :(

Это сообщение отредактировал(а) jone31 - 19.6.2009, 18:38
PM MAIL   Вверх
NewDima
Дата 19.6.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



 smile смотрю на php-скрипт, а он пашет без твоего аякса вообще?
PM ICQ   Вверх
jone31
  Дата 19.6.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



NewDima, ну конешно пашет.
PM MAIL   Вверх
jone31
  Дата 20.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 343
Регистрация: 29.11.2008

Репутация: нет
Всего: нет



Все я разобрался.

ТЕМА ЗАКРЫТА
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1006 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.