2012-11-12 13 views
5

Eventuali duplicati:
Ajax cross domain callrichieste tra domini con JSON

La mia applicazione utilizza ASP .Net Web API 4.5 RTM che interagisce con HTML5 e AJAX su un dominio diverso

Questo applicazione necessaria per utilizzare JSONP invece di JSON per la serializzazione/deserializzazione?

risposta

3

JSONP o JSON with padding è un complemento del formato dati JSON di base. Fornisce un metodo per richiedere dati da un server in un dominio diverso, cosa proibita dai tipici browser Web a causa della stessa politica di origine.

Secondo lo stesso criterio di origine, una pagina Web offerta da server1.esempio.com non può in genere connettersi o comunicare con un server diverso da server1.example.com.

Un'eccezione è l'elemento HTML. Sfruttando la politica aperta per gli elementi, alcune pagine li usano per recuperare il codice JavaScript che opera su dati in formato JSON generati dinamicamente da altre origini. Questo modello di utilizzo è noto come JSONP.

Le richieste per JSONP non recuperano JSON, ma codice JavaScript arbitrario. Vengono valutati dall'interprete JavaScript, non analizzati da un parser JSON.

Per vedere come funziona questo modello, considerare prima una richiesta URL che restituisce i dati JSON. Un programma JavaScript potrebbe richiedere questo URL tramite XMLHttpRequest, ad esempio. Supponiamo che l'ID utente di Foo è 1234. Un browser che richiede l'URLhttp: //server2.example.com/Users/1234, passando l'id Foo, avrebbe ricevuto qualcosa come:

{"Name": "Foo", "Id": 1234, "Rank": 7} 

Questo JSON dati potrebbero essere dinamicamente generato, in base ai parametri della query passati nell'URL. Qui, un elemento HTML specifica per la sua src attribuire un URL che restituisce JSON:

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234"> 
</script> 

Il browser, in ordine, scaricare il file di script, valutarne i contenuti, interpretare i dati JSON prime come un blocco, e genera un errore di sintassi. Anche se i dati sono stati interpretati come un oggetto letterale JavaScript, non è possibile accedervi da JavaScript in esecuzione nel browser, poiché senza un valore di assegnazione variabile i valori letterali non sono accessibili.

Nel modello di utilizzo JSONP, la richiesta dell'URL indicata dall'attributo src restituisce i dati JSON, con una chiamata di funzione racchiusa. In questo modo, una funzione già definita nell'ambiente JavaScript può manipolare i dati JSON. Un payload JSONP potrebbe assomigliare a questo:

functionCall({"Name": "Foo", "Id": 1234, "Rank": 7}); 

La chiamata di funzione è la "P" della JSONP - il "padding" attorno al JSON pura, o secondo alcuni [1] il "prefisso". Per convenzione, il browser fornisce il nome della funzione di callback come parametro di query denominato, in genere utilizzando il nome JSONP o callback, nella sua richiesta al server, ad es.,

<script type="text/javascript" 
    src="http://server2.example.com/Users/1234?jsonp=parseResponse"> 
</script> 

In questo esempio, il payload ricevuto sarebbe:

parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7}); 
Problemi correlati