Questão sobre Ajax

2 respostas
jason_bourne

Pessoal,

Estou tentando consertar essas funções de ajax mas não consigo. O que acontece é que quando eu populo um combo ou um input text usando ajax…ele popula certinho com os dados corretos do banco, mas quando eu tento popular novamente (sem fechar o IE) ele volta com os dados antigos. É como se ele visse que o objeto foi criado e ele não chama os métodos pra popular novamente a partir do banco.

Alguém sabe como eu posso alterar o código para que ele sempre chame o método (java) para popular os combos e os input text?

Obs: ele funciona certo no firefox, mas no IE não.

ajax.js:

var objXMLHttpRequest = "";
var req = null;
var response = null;

var XMLHTTP_VERSIONS = ["Microsoft.XMLHTTP",
						"MSXML2.XMLHTTP",
						"Msxml2.XMLHTTP.7.0",
						"Msxml2.XMLHTTP.6.0",
						"Msxml2.XMLHTTP.5.0",
						"Msxml2.XMLHTTP.4.0",
						"MSXML2.XMLHTTP.3.0"];

function callUrlAjax(dscUrl, method, functionReturn)
{
	req = null;

	var objExiste = true;
	try {
	    req = new XMLHttpRequest();
	}
	catch (ex) {
		try {
	        if (objXMLHttpRequest) {
	            req = new ActiveXObject(objXMLHttpRequest);
	        }
			else {
				for (var i=0; i<XMLHTTP_VERSIONS.length ; i++) {
					try {
						req = new ActiveXObject(XMLHTTP_VERSIONS[i]);
						if (req) {
							objXMLHttpRequest = XMLHTTP_VERSIONS[i];
							break;
						}
					}
					catch (exA) {
						objExiste = false;
					}
				}
	        }
	    }
		catch (exB) {
			objExiste = false;
		}
	}

	// Verifica se o objeto foi criado
	if (objExiste == false)
		return false;

	req.onreadystatechange = function() {
		if (isResponseCompleteAjax()) {
			if (req.status == 200) {
	   			response = req.responseText;
	   			functionReturn(response);
	   		}
   	 	}
   	}
	req.open(method, dscUrl, true);
	req.send(null);

	return true;
}

function isResponseCompleteAjax()
{
    if (req.readyState == 4) return true;
	else return false;
}

function isValidResponseAjax()
{
	if (req.status == 200 && req.responseXML != null) {
		response  = req.responseXML.documentElement;
		if (response != null) return true;
		else return false;
	}
	else return false;
}

function getResponseValueAjax(tagName, position)
{
	if (response != null) {
		var elements = response.getElementsByTagName(tagName);
		if (elements != null&&elements[position].firstChild!=null)
		return elements[position].firstChild.data;
		else return "";
	}
	else return "";
}

function getResponseSizeAjax(tagName)
{
	if (response != null) {
		var elements = response.getElementsByTagName(tagName);
		if (elements != null) return elements.length;
		else return 0;
	}
	else return 0;
}

SelectUtil.js:

var SelectUtil = new Object();


SelectUtil.clear = function(elem) {
	for (var i = elem.options.length - 1; i >= 0; i--) {
    	elem.options[i] = null;
  	}
};

SelectUtil.insert = function(elem, text, value) {
	var opt = new Option(text, value);
    this.insertOption(elem, elem.options.length, opt);
};

SelectUtil.remove = function(elem, idx) {
  	if ((idx < 0) || (idx >= elem.options.length)) {
  		return null;
    }
    var result = elem.options[idx];
    elem.options[idx] = null;
    return result;
};

SelectUtil.selectByValue = function(elem, value) {
	for (var i = 0; i < elem.options.length; i++) {
    	var opt = elem.options[i];
      	if (opt.value == value) {
        	opt.selected = true;
          	break;
      	}
    }
};

SelectUtil.countSelected = function(elem) {
	var count = 0;
    for (var i = 0; i < elem.options.length; i++) {
    	var opt = elem.options[i];
      	if (opt.selected ) {
        	count++;
      	}
    }
    return count;
};

SelectUtil.insertOption = function(elem, idx, opt) {
	if ((idx < 0) || (idx > elem.options.length)) {
    	idx = elem.options.length;
  	}

  	if (idx < elem.options.length) {
    	for (var i = elem.options.length; i > idx; i--) {
    		var opt2 = elem.options[i - 1];
      		elem.options[i] = new Option(opt2.text, opt2.value);
      	}
  	}
  	elem.options[idx] = opt;
};

2 Respostas

s4nchez

Cara, pra fugir dos problemas de compatibilidade entre browsers (e de quebra diminuir a quantidade de código), procure usar alguma biblioteca de Ajax, como a Prototype.

jason_bourne

Não tenho tempo hábil para isso, preciso consertar o que já tenho;

Criado 8 de fevereiro de 2008
Ultima resposta 10 de fev. de 2008
Respostas 2
Participantes 2