Jsonp e Web Service Cross Server

giovedì 09 gennaio 2014 - 10.58
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Javascript

gsistemi Profilo | Junior Member

Ho la necessità di richiamare un Web Service .NET da un altro dominio. Sto provando con Ajax e jQuery che già utilizzo ma sullo stesso dominio.

Questo il codice della richiesta
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'jsonp',
async: false,
crossDomain: true,
jsonp: false,
processData: false,
jsonpCallback: get_data,
url: url_test
});

e questa la funzione che viene richiamata
function get_data(dati) {
var i=0;
$str = JSON.parse(dati.d);
...
}

facendo il debug la funzione di callback viene richiamata ma la variabile "dati" risulta undefined.

Questo è quello che ritorna il Web Service richiamandolo manualmente

get_data(
{
"giorno": "10 Gennaio",
"locale": "xxx",
"indirizzo": "Via aaa"
},
{
"giorno": "17-18 Gennaio",
"locale": "yyy",
"indirizzo": "Torino"
},
{
"giorno": "14 - 15 FEBBRAIO",
"locale": "zzz",
"indirizzo": "Piazza bbb"
}
);

Che sbaglio?!?

alx_81 Profilo | Guru

ciao, la butto lì:

>Questo è quello che ritorna il Web Service richiamandolo manualmente
>get_data(
aggiungere un return qui:
> {
> "giorno": "10 Gennaio",
> "locale": "xxx",
> "indirizzo": "Via aaa"
> },
> {
> "giorno": "17-18 Gennaio",
> "locale": "yyy",
> "indirizzo": "Torino"
> },
> {
> "giorno": "14 - 15 FEBBRAIO",
> "locale": "zzz",
> "indirizzo": "Piazza bbb"
> }
> );

così torni la stringa del json..


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gsistemi Profilo | Junior Member

il return di jsonp (non json) comprende anche get_data

alx_81 Profilo | Guru

>il return di jsonp (non json) comprende anche get_data
l'avevo proprio buttata allora non so aiutarti.. dovrei provare a fare una paginetta..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gsistemi Profilo | Junior Member

ok! hai soluzioni alternative?!?

alx_81 Profilo | Guru

>ok! hai soluzioni alternative?!?
perchè invece non mi passi una paginetta con tutto che provo?
Se riesci.. Altrimenti io la farei in json semplicemente con ajax come ho sempre fatto.. Uso il serializer di Asp.Net MVC
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gsistemi Profilo | Junior Member

La pagina è questa: http://www.valeriavisconti.it/ lo script si attiva cliccando su Spettacoli (le funzioni le trovi in fondo al file valeria-visconti.js).

l'indirizzo del Web Service è questo: http://www.donnaperfetta.com/ws/dp.asmx/get_valeria

P.S. Json normale non funziona con i web service cross-domain, almeno così ho letto!

alx_81 Profilo | Guru

>P.S. Json normale non funziona con i web service cross-domain, almeno così ho letto!
sì sì, non avevo visto io.. vedo se riesco a saltarci fuori..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

alx_81 Profilo | Guru

Ho fatto un esempio chiamando una pagina locale con jsonp.
poi ho provato a chiamare il tuo servizio, ma mi dà "unexpected token <".
Secondo me, usando l'esempio allegato andrebbe, ma devi togliere il risultato del web service come XML..
Fammi sapere,
ciao
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gsistemi Profilo | Junior Member

Così non è Cross-domain!!!
La funzione success non la utilizza (il debug la salta proprio) e va direttamente alla funzione di callback ma non ho i dati (undefined).

alx_81 Profilo | Guru

Ho provato come segue:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

come vedi chiamo la sample api di google.. e vedo la risposta come da console (da macchina locale all'api di google):

693x618 32Kb


Forse non considero qualcosa io. Però mi va nella success e poi mi stampa in console i result..
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

gsistemi Profilo | Junior Member

allora sbaglio qualcosa lato web service. io uso Json.net per serializzare un dataset, forse è li che sta il problema visto che il formato di json è diverso da jsonp.

alx_81 Profilo | Guru

>allora sbaglio qualcosa lato web service. io uso Json.net per
>serializzare un dataset, forse è li che sta il problema visto
>che il formato di json è diverso da jsonp.
json è solo la rappresentazione ad oggetti, jsonp da quel che so fa method injection e quindi in realtà ti fa un "metodo proxy" da quanto ho capito..
Prova a tornare proprio una stringa semplice e vedere se gira.. Non saprei proprio che altro dirti..

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5