Pregunta

Pienso en el uso JSONP para llamar a un servicio web externo para moverse por el hecho de que no quiero para crear una función global que potencialmente podrían entrar en conflicto con la página de llamada. Pensé que la creación de un nombre de función aleatoria y se lleva hasta funcionaría. Algo como esto:

<script src="www.foo.com/b?cb=d357534">

donde cb es el nombre de la función de devolución de llamada, el servidor volvería

d357534({my json data});

Lo que quiero saber es cómo crear el nombre de la función aleatoria, estoy seguro de que podría utilizar eval pero es ésta la mejor manera de hacerlo?

En esencia, lo que estoy tratando de hacer es lo siguiente:

var d + Math.floor(Math.random()*1000001) = function(){...   
¿Fue útil?

Solución

Esto debería hacer lo que quiera. Es necesario guardar el nombre de la función en algún lugar para que pueda pasarlo al servidor, pero se puede hacer que dentro de un ámbito local para no contaminar el espacio de nombres global.

var functionName = 'd' + Math.floor(Math.random()*1000001);
window[functionName] = function() { ... }

Otros consejos

Para hacer que una variable global nombre aleatorio que podría hacer esto:

window['randomvar' + Math.floor(Math.random()*1000001)] = function() { ... };

Ahora, por supuesto, usted tiene el problema de recordar el nombre aleatorio en alguna parte. Se podría hacer un nombre aleatorio para que variables también. Entonces habría que recordar el nombre de variable que, de modo que usted podría mirar a su valor y luego saber cómo encontrar su función. Después de un tiempo, las cosas van a empezar a recibir raro.

¿Por qué no sólo tiene que utilizar un contador y se incrementará cada vez que se necesita una nueva función:

var name = "callback" + window.COUNTER++;
window[name] = function() { ... };

Si se quiere evitar ensuciar el espacio de nombres global con demasiadas referencias que podría (y debería) adjuntar el mostrador y devoluciones de llamada a un único objeto global:

var JSONP = window.JSONP;
var name = "callback" + JSONP.COUNTER++;
JSONP[name] = function() { ... };

En este caso se podría llamar el método siguiente:

JSONP.callback_12(json);

De grueso que tiene que inicializar el JSONPobject y la variable COUNTER primero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top