llamar - Cómo ejecutar javascript dentro de una etiqueta de script devuelta por una respuesta ajax
llamar javascript desde html (7)
¿Le ayudaría esto: http://docs.jquery.com/Ajax/jQuery.getScript ?
Estoy enviando una solicitud jquery get así:
$.get($(this).attr("href"), $(this).serialize(), null, "script");
La respuesta que espero recibir será envuelta en etiquetas de script.
Entiendo que el navegador no ejecuta la respuesta a menos que se devuelva sin las etiquetas de script. Normalmente, eliminaría las etiquetas de la respuesta, pero en esta situación no tengo acceso al código que se ejecuta en la máquina remota, por lo que no puedo eliminar las etiquetas en la fuente.
¿Hay alguna manera de eliminar las etiquetas de script del lado del cliente de respuesta y ejecutar el javascript?
Debes poder hacer lo siguiente:
$.get($(this).attr("href"), $(this).serialize(), function(data){
var script = $(data).text();
eval(script);
});
Digamos que nuestra respuesta está en la var ''respuesta'':
script = response.replace(/<script>(.*)<//script>/, "$1"); // Remove tags
eval(script); // Execute javascript
Hice esto de manera ligeramente diferente, y usé php land para hacerlo más fácil. (No me gusta usar eval, ni me gustan las reescritas conspicuas).
Coloqué todos mis jquery en una cadena de PHP como tal (había MUCHO más JavaScript en la vida real)
$out .= " $(''#save_now'').button(); /n";
$out .= " $(''#save_now'').click( function() {/n";
$out .= " return false;/n";
$out .= " }); /n";
entonces también en php land
echo "<script>/n";
echo " function onOpen(){ /n";
echo $out;
echo " } /n";
echo "</script>/n";
luego en la llamada jQuery $ .ajax hago esto
$.ajax({
url: geturl,
type: ''post'',
data: getparams,
success: function(data) {
mydiv.html(data);
onOpen();
},
cache: false
});
Como puede ver, no hace falta lo de php land, es solo que en mi base de código tuve la necesidad de hacerlo. el truco es eliminar $(document).ready(function(){});
y enrolla tu propio
La respuesta de José Basilio está bien, pero recomiendo reemplazar eval con la función globalEval de jQuery ...
$.get($(this).attr("href"), $(this).serialize(), function(data) {
script = $(data).text();
$.globalEval(script);
});
globalEval es la función a la que normalmente se llama cuando llama a un método ajax con un tipo de script de retorno.
Esto de la documentación de la API ...
Este método se comporta de manera diferente al uso de una evaluación normal de JavaScript (), ya que se ejecuta dentro del contexto global (lo cual es importante para cargar scripts externos de forma dinámica).
O:
var myScript = new Function($(''script#myscript'',responseText).text());
myScript();
Si entiendo bien su pregunta, esto debería ser suficiente para eliminar el texto de las etiquetas de script:
$(response).text()