Показать сообщение отдельно
  #1 (permalink)  
Старый 01.06.2012, 16:29
Новичок на форуме
Отправить личное сообщение для ptereo Посмотреть профиль Найти все сообщения от ptereo
 
Регистрация: 01.06.2012
Сообщений: 9

универсальная Ajax-функция
всем привет.

вобщем, проблема началась тогда, когда я решил хаотичный код привести в порядок и написать функцию, которая бы это делала. Изначально код был примерно такого вида:
function xmlPicking() {

		
url = document.getElementById("target_list").value;
		
xml2 = new XMLHttpRequest();
xml2.open("GET", "./php/xml.php?url="+url, true);
xml2.send();
		
xml2.onreadystatechange = function() {
	if(xml2.readyState == 4 && xml2.status == 200 ) {
		r_file = xml2.responseText;

                xml1 = new XMLHttpRequest();
                xml1.open("POST","./upload/"+r_file+".xml",true);
                xml1.send();
			
                xml1.onreadystatechange = function() {
                     if(xml1.readyState == 4 && xml1.status == 200 ) {					                                                        result = xml1.responseText;
document.getElementById("result").innerHTML = result+
"\nr_file="+r_file;
}
}
				
}


}


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

function ajax(options) {
	// опции запроса
	options = {
		// тип запроса
		type: options.type,
		// ссылка на url запроса
		url: options.url,
		// асинхронный запрос или нет
		acync: options.acync,
		// тип возвращаемого ответа(xml, text или "")
		r_type: options.r_type,
		// функция, выполняемая в случае успешного запроса
		//onSuccess: options.onSuccess
		}
	
	var xml = new XMLHttpRequest();
	xml.open(options.type, options.url, options.acync);
		
	xml.onreadystatechange = function() {
		if(xml.status == 200 && xml.readyState == 4) {
			// возврат ответа в зависимости от типа запроса
			if(options.r_type == "xml") response = xml.responseXML;
			if(options.r_type == "text") response = xml.responseText;
			// функция, выполняемая при успешном запросе
			options.onSuccess(response);
			}
	}
	// установка соединения с сервером
	xml.send();
}


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

options = {
		type: "GET",
		url: "./php/xml.php?file="+document.getElementById("target_list").value,
		acync: true,
		r_type: "text"
	}
	ajax(options);


и все бы хорошо, но вот не удается мне с такой функцией сделать асинхронный запрос, только синхронный. Как бы я не пытался втулить onSuccess: someFunction(response) оно не хочет выполняться. Но вообще если в onSuccess поставить какую-нибудь простую функцию, типа test() {alert(1);} оно выполнится.

Моя просьба: помогите разобраться, как правильно в моем случае составить асинхронный запрос и как правильно сделать, если нужно вложенное выполнение функций(как в первом куске кода)
Ответить с цитированием