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;
};
Pergunta
Guest Eduacsp
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; };Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.