Alternativas a eval() en JavaScript

  • Autor Autor Delzon
  • Fecha de inicio Fecha de inicio
D

Delzon

Beta
Redactor
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todo 😀
Dicen que el uso de eval es malo :/...
Bueno quisiera saber entonces si se puede reemplazar de alguna forma.

Lo que quiero es a travez de ajax obtener una porcion de codigo javascript y ejecutarla en el navegador.

en otras palabras la peticion devuelve un STRING:
alert("Hola");

La unica forma que lo eh logrado hacer es:
eval(response) que vendria a ser esto: eval(alert("hola"))

Existe otra manera que no se usando eval() ?
:star2:
 
Dependiendo qué sea lo que ocupas sacar y/o de dónde, quizas se pudiera hacer de otra forma 😉
 
Claro! 🙂

Símplemente, usa una etiqueta script en vez de solicitarlo via ajax:

Insertar CODE, HTML o PHP:
(function() {
var s = document.createElement('script'),
   fjs = document.getElementsByTagName('script')[0];
s.src = "URL";
s.async = true;
fjs.parentNode.insertBefore(s, fjs);
}());

O mejor aún: Usa JSON desde el server y realiza la respuesta desde el script principal:

Desde el servidor:

PHP:
// Básicamente mandas todos los datos que necesites:
echo json_encode(array(
    'frases' => array('Hola Mundo!','Esto se convertirá a JSON', 'Cualquier otra cosa')
));

// Esto se convertirá en un objeto JSON:
// {"frases": ["Hola mundo!", "Ésto se convertirá a JSON", "Cualquier otra cosa"]}
Éste sería el callback js donde recibirías la respuesta, es decir: el onload de tu XMLHttpRequest o el success de jQuery.

Si usas jQuery puedes evitar parsear el JSON

Insertar CODE, HTML o PHP:
function callBack(data) {
    var data = (window.JSON && window.JSON.parse) ? window.JSON.parse(data) : (new Function("return " + data)())
        // Trabajar con los elementos que nos ha devuelto el servidor
        , frases= data.frases
        , len = frases.length
        , i = 0;
    for(; i < len; i++) {
        alert(frases[i]);
    }
}
 
Atrás
Arriba