| |||
Ejecutar javascript que viene de Ajax Funciona en Mozilla No en Explorer Hola estoy intentando ejecutar el javascript que viene dentro de una peticion Ajax, estoy intentando aplicar lo que maborak posteo en http://www.forosdelweb.com/f77/howto...e-ajax-510438/ Última edición por sqa212; 12/01/2009 a las 18:04 |
| |||
Respuesta: Ejecutar javascript que viene de Ajax Funciona en Mozilla No en Explorer He simplificado el script y el problema sigue sucediendo NO funciona en Explorer y SI Funciona en Mozilla y en Google Chrome: ----------------------------- Base.asp ----------------------------- <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <html> <head> <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"> <META HTTP-EQUIV="expires" content="0"> <META HTTP-EQUIV="cache-control" content="no-cache"> <META HTTP-EQUIV="pragma" content="no-cache"> <script language="javascript" type="text/javascript"> function handleHttpResponse() { if (http.readyState == 1) { document.getElementById("Msg").innerHTML = 'Loading Data ...'; } if (http.readyState == 4) { if (http.status == 200) { if (http.responseText.indexOf('invalid') == -1) { var scs=http.responseText.extractScript(); document.getElementById('Msg').innerHTML =http.responseText.stripScript(); scs.evalScript(); //document.getElementById('Msg').innerHTML =http.responseText; enProceso = false; } } } } function PeticionUno() { if (!enProceso && http) { var url = "Primera.asp?sid="+Math.random(); http.open("GET", url, true); http.onreadystatechange = handleHttpResponse; enProceso = true; http.send(null); } } function PeticionDOS() { if (!enProceso && http) { var url = "Segunda.asp?sid="+Math.random(); http.open("GET", url, true); http.onreadystatechange = handleHttpResponse; enProceso = true; http.send(null); } } function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; } var enProceso = false; // lo usamos para ver si hay un proceso activo var http = getHTTPObject(); // Creamos el objeto XMLHttpRequest </script> <SCRIPT language=Javascript src="interpretadorAjax.js"></SCRIPT> </head> <body> <table id="tableformUndoArtFav" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <form id="formUndoFavArt" action="post"> <INPUT type="Button" value="Realizar Primera Peticion AJAX" onClick="PeticionUno();"> </form> </td> </tr> </table> <div id="Msg"></div> </body> </html> ----------------------------- Primera.asp ----------------------------- <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Response.Write "Primera peticion ASP." %> <script>alert("Primera Peticion AJAX");</script> <SCRIPT language=Javascript src="interpretadorAjax.js"></SCRIPT> <% 'De esta forma se procesaria automaticamente ' <script>PeticionDOS();< script> '<SCRIPT language=Javascript src="interpretadorAjax.js">< SCRIPT> 'de la forma de abajo requiere iteraccion por parte del usuario %> <a href="javascript: PeticionDOS()">Realizar Segunda Peticion AJAX</a> <SCRIPT language=Javascript src="interpretadorAjax.js"></SCRIPT> ----------------------------- Segunda.asp ----------------------------- <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <% Response.Write "Segunda peticion ASP.</FONT>" %> <script>alert("Segunda Peticion AJAX");</script> <SCRIPT language=Javascript src="interpretadorAjax.js"></SCRIPT> ----------------------------- interpretadorAjax.js ----------------------------- var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)'; /** * Eval script fragment * @return String */ String.prototype.evalScript = function() { return (this.match(new RegExp(tagScript, 'img')) || []).evalScript(); }; /** * strip script fragment * @return String */ String.prototype.stripScript = function() { return this.replace(new RegExp(tagScript, 'img'), ''); }; /** * extract script fragment * @return String */ String.prototype.extractScript = function() { var matchAll = new RegExp(tagScript, 'img'); return (this.match(matchAll) || []); }; /** * Eval scripts * @return String */ Array.prototype.evalScript = function(extracted) { var s=this.map(function(sr){ var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1]; if(window.execScript){ window.execScript(sc); } else { window.setTimeout(sc,0); } }); return true; }; /** * Map array elements * @param {Function} fun * @return Function */ Array.prototype.map = function(fun) { if(typeof fun!=="function"){return false;} var i = 0, l = this.length; for(i=0;i<l;i++) { fun(this[i]); } return true; }; |
| |||
Respuesta: Ejecutar javascript que viene de Ajax Funciona en Mozilla No en Explorer Lo solucione eliminando de las 2 paginas llamadas: <SCRIPT language=Javascript src="interpretadorAjax.js"></SCRIPT> |
| |||
Respuesta: Ejecutar javascript que viene de Ajax Funciona en Mozilla No en Explorer mira lo probe pero me da que no encuentra la direccion de los script que estan en la pagina que se carga |
| |||
Respuesta: Ejecutar javascript que viene de Ajax Funciona en Mozilla No en Explorer decir que el código ajax.js que en hilo original publicó tonqac funciona perfectamente en todos los navegadores incluido Ieplorer, sólo que tiene un pequeño error, que se corrige sustituyendo la línea en rojo por la de azul.
Código:
var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)'; /** * Eval script fragment * @return String */ String.prototype.evalScript = function() { return (this.match(new RegExp(tagScript, 'img')) || []).evalScript(); }; /** * strip script fragment * @return String */ String.prototype.stripScript = function() { return this.replace(new RegExp(tagScript, 'img'), ''); }; /** * extract script fragment * @return String */ String.prototype.extractScript = function() { var matchAll = new RegExp(tagScript, 'img'); return (this.match(matchAll) || []); }; /** * Eval scripts * @return String */ Array.prototype.evalScript = function(extracted) { var s=this.map(function(sr){ var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1]; if(window.execScript){ window.execScript(tagScript); window.execScript(sc); } else { window.setTimeout(sc,0); } }); return true; }; /** * Map array elements * @param {Function} fun * @return Function */ Array.prototype.map = function(fun) { if(typeof fun!=="function"){return false;} var i = 0, l = this.length; for(i=0;i<l;i++) { fun(this[i]); } return true; }; function AJAX2(){ var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"]; var ajax = false; for(var i=0 ; !ajax && i<ajaxs.length ; i++){ try{ ajax = new ActiveXObject(ajaxs[i]); } catch(e) { ajax = false; } } if(!ajax && typeof XMLHttpRequest!='undefined') { ajax = new XMLHttpRequest(); } return ajax; } function getPagina(pagina,capa){ document.getElementById(capa).innerHTML = "<center>C A R G A N D O</center>"; var ajax = AJAX2(); if(!ajax){ document.getElementById(capa).innerHTML = "Error: El navegador no acepta ActiveX. No se pudo cargar la pagina."; return false; } ajax.open("POST",pagina,true); ajax.onreadystatechange = function() { if (ajax.readyState == 4) { var scs=ajax.responseText.extractScript(); document.getElementById(capa).innerHTML=ajax.responseText.stripScript(); scs.evalScript(); } } ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.send(null); } saludos |