Показать сообщение отдельно
  #5 (permalink)  
Старый 08.01.2009, 17:26
Новичок на форуме
Отправить личное сообщение для V0van Посмотреть профиль Найти все сообщения от V0van
 
Регистрация: 05.01.2009
Сообщений: 3

Я в сети. Спасибо большое за код. До такого кода мне еще расти и расти.. но нужное почерпнул - все что мне было нужно - это функция eval()
Пусть универсальных решений в сети и полно - написал свое собственное. Конечно, далеко не идеальное - зато работает на ура!
Теперь для работи с аяксом нужно написать всего одну! строчку кода:
ajax("serverAdr", "params", "type", "function", "destID", "loadingID", "loadingHtlml")
Тоесть адрес сервера, параметри, возвращаемый тип (xml или text), функция обработки результата, ID елемента куда запишем результат (тоесть если указана ф-ция - результат обрабатывает она, если указан destID - то результат записывается в этот елемент). Ну и последних 2 параметра - это ID елемента и текст статуса загрузки - ну гифка там какая-нибудь.
Сделана постановка в очередь - если запросов много.. Проверил роботоспособность - в цикле:
while (i=0;i<50;i++){
ajax ("script1.php","param="+i,"text","","testID",", "")
ajax ("script2.php","param="+i,"text","","testID",", "")
ajax ("script3.php","param="+i,"text","","testID",", "")
ajax ("script4.php","param="+i,"text","","testID",", "")
ajax ("script5.php","param="+i,"text","","testID",", "")
}
И через пару секунд получил 250 ответов от сервера.. все четко)))
Теперь аякс можно везьде где только можно пихать! ))
Даю код - может кому пригодится.. Если найдете неточности, ошибки или знаете как усовершенствовать - пишите.
var xmlHttp = createXmlHttpRequestObject();

var intervalID = 0;

var showErrors = true;


var dId    = ''; // destinationID 
var cbF    = ''; // callbackFunction 
var type   = ''; // type ('text' OR 'xml')

var updateInterval = 100; // how many miliseconds to wait to send new request

var timerId = 0;

/* initialize the ajax cache */

var cache = new Array();



function createXmlHttpRequestObject(){


  var xmlHttp;


  try{

    xmlHttp = new XMLHttpRequest();

  }catch(e){

    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",

                                    "MSXML2.XMLHTTP.5.0",

                                    "MSXML2.XMLHTTP.4.0",

                                    "MSXML2.XMLHTTP.3.0",

                                    "MSXML2.XMLHTTP",

                                    "Microsoft.XMLHTTP");

    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++){

      try{ 

        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);

      } 

      catch (e) {} // ignore potential error
    }

  }

  if (!xmlHttp)

    displayError("Error creating the XMLHttpRequest object.");

  else 

    return xmlHttp;

}


function displayError($message){

  if (showErrors){

    alert("Error encountered: \n" + $message);
  }

}


function doAjax (){

  if (cache.length == 0 ){
  		timerId = 0; 
  		return;	 
  } 
  	 
  if (xmlHttp){   
    try{      
      if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0)){
		  		  		   
		  var ajax_params = cache.shift(); 

 		  if ( ajax_params.lHtml && ajax_params.lId ){
 		  		document.getElementById( ajax_params.lId ).innerHTML = ajax_params.lHtml; 
 		  }


		  dId    = ajax_params.dId;
		  cbF    = ajax_params.cbF;
		  type   = ajax_params.type;  			  	
 
        xmlHttp.open("POST", ajax_params.server , true);

        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");


        xmlHttp.onreadystatechange = handleRequestStateChange;

        xmlHttp.send ( ajax_params.params); 
      }else{
      	timerId = setTimeout("doAjax();", updateInterval);
      }      	 
    }catch (e){

      displayError("search error: "+e.toString());

    }

  }

}


function handleRequestStateChange(){  	
  if (xmlHttp.readyState == 4){
    if (xmlHttp.status == 200){

      try{

        readResponse();      
      }

      catch(e){

        displayError("handleRequestStateChange1 error: "+e.toString());

      }

    }else{

      displayError("handleRequestStateChange2 error: "+xmlHttp.statusText);

    }

  }
}


function readResponse(){


  var response = xmlHttp.responseText;
 
  if (response.indexOf("ERRNO") >= 0 

      || response.indexOf("error:") >= 0

      || response.length == 0)

    throw(response.length == 0 ? "Server error." : response);


   try{

		var responseXml = xmlHttp.responseXml;  
   }catch(e){

		var responseXml = '';  
   }

 
 	if ( type == 'xml'){
		var resp = responseXml; 	
	}else{
		var resp = response;
	}

 	if ( cbF ){
		eval( cbF +'(resp)'); 	
 	}else if ( dId ){ 	
 		document.getElementById( dId ).innerHTML = resp;	
 	} 	
 	
 	timerId = setTimeout("doAjax();", updateInterval); 
}


function ajax (serverVal , paramsVal , typeVal , cbFVal , dIdVal ,
				    lIdVal , lHtmlVal ){
	
	var ajax_params = {server: serverVal,
	                   params: paramsVal,							 
							 type: typeVal,
							 cbF: cbFVal, 
							 dId: dIdVal,
							 lId: lIdVal,
							 lHtml: lHtmlVal
							 };
	cache.push( ajax_params );

	if ( !timerId ){						 
		doAjax();
	}	 
}
Ответить с цитированием