PDA

View Full Version : [Ajax] Leggere in contenuto da un URL esterno


robertino_salemi
09-12-2014, 16:52
Salve a tutti,
sicuramente è un problema trattato molte volte, ma nonostante le ricerche, non sono riuscito a trovare una valida soluzione.

Tramite Jquery, vorrei leggere il contento di una pagina esterna al mio dominio, contenente una tabella, dopo averla letta fare una conversione in testo da inserire in un DIV.

Il problema riguarda solo la prima parte, cioè la lettura del contenuto tramite URL.

Ho provato con:

var content;
$.ajax({
url: url,
type: 'GET',
success: function (result) {
content = result;
}
});
[code]
Ma non succede nulla.

Per testare la mia funziona ho provato a valorizzare "content" a mano, come faccio ad applicargli la mia funzione, cioè:
[code]
function showText (content){
var textToShow;
$('table#GetFeatureInfoTable tr.cellValue').each(function () {
$('table#GetFeatureInfoTable tr.cellValue td').each(function () {
if ($(this).hasClass('ID')) {
textToShow = '<div class="featuredID">id: ' + $(this).html() + '</div>';
}
if ($(this).hasClass('DESCRIPTION')) {
textToShow = textToShow + '<div class="description">Descrizione: ' + $(this).html() + '</div>';
}
});
});
}


Il progetto è in Asp.net, posso risolvere in maniera diversa?

Grazie.

BlackAuron
09-12-2014, 21:22
Per farla breve ... non puoi a causa della same origin policy. http://en.wikipedia.org/wiki/Same-origin_policy
esistono trucchetti per raggirarla, ma non sono affidabili, e son solitamente lenti.

robertino_salemi
09-12-2014, 22:01
Capisco, però l'URL interrogato non è altro che un server locale presente nella mia rete locale...

OoZic
09-12-2014, 23:24
Qual'è l'URL della pagina dove gira lo script e qual'è quello della risorsa che vuoi includere?

Eventualmente devi attivare CORS sul tuo webserver
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Daniels118
10-12-2014, 09:19
Potresti lasciare che sia il server a fare la get sull'altro dominio e fargli inviare la risposta sulla tua pagina. In pratica la pagina del dominio A fa una richiesta ajax (preferibilmente una post) verso il suo server passando come parametro l'url di una pagina appartenente al dominio B, il server fa una richiesta per tale url ed inserisce la risposta nella medesima chiamata ajax. Se il dominio B richiede l'utilizzo dei cookie la cosa si complica un po', soprattutto se è necessaria l'autenticazione, ma è comunque fattibile.

robertino_salemi
10-12-2014, 09:42
Si tratta di url locali, del tipo http://nome-computer:8080/server.exe

Ho trovato una libreria Jquery che da supporto per CROSS (http://www.ajax-cross-origin.com), cosa ne pensate?
La conoscete?

Daniels118, potresti darmi qualche dettaglio in più?

Grazie.

tomminno
10-12-2014, 09:50
Si tratta di url locali, del tipo http://nome-computer:8080/server.exe

Ho trovato una libreria Jquery che da supporto per CROSS (http://www.ajax-cross-origin.com), cosa ne pensate?
La conoscete?

Daniels118, potresti darmi qualche dettaglio in più?

Grazie.

Considera che per un utente qualsiasi che si trovi ad utilizzare quel sito quell'url risulterebbe irraggiungibile...

robertino_salemi
10-12-2014, 10:03
Considera che per un utente qualsiasi che si trovi ad utilizzare quel sito quell'url risulterebbe irraggiungibile...

Si tratta di un progetto non pubblico, ma utilizzato solo all'interno di una LAN.

Se eseguo una richiesta del tipo:

$.ajax({
type: 'POST',
url: my_url,
crossDomain: true,
dataType: 'json',
success: function (responseData, textStatus, jqXHR) {
console.log(responseData);
},
error: function (responseData, textStatus, errorThrown) {
console.warn(responseData, textStatus, errorThrown);
alert('CORS failed - ' + textStatus);
}
});

la console mi restituisce:

Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da my_url È possibile risolvere il problema spostando la risorsa sullo stesso dominio o attivando CORS.


Grazie.

Daniels118
10-12-2014, 10:47
Ho dato un'occhiata al plugin che hai trovato, è veramente interessante.
In questa pagina (http://www.ajax-cross-origin.com/how.html) è spiegato come funziona, il quarto metodo (Setting up a local proxy) fa praticamente quello che ti dicevo prima.
Gli altri metodi presuppongono che tu abbia la possibilità di modificare il servizio presente sull'altro dominio in modo da adeguarlo alle richieste cross-dominio, il proxy invece è più flessibile (e direi anche più immediato), valuta tu cosa puoi utilizzare e quale metodo ritieni più conveniente.

tomminno
10-12-2014, 11:03
Si tratta di un progetto non pubblico, ma utilizzato solo all'interno di una LAN.

Se eseguo una richiesta del tipo:

$.ajax({
type: 'POST',
url: my_url,
crossDomain: true,
dataType: 'json',
success: function (responseData, textStatus, jqXHR) {
console.log(responseData);
},
error: function (responseData, textStatus, errorThrown) {
console.warn(responseData, textStatus, errorThrown);
alert('CORS failed - ' + textStatus);
}
});

la console mi restituisce:

Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da my_url È possibile risolvere il problema spostando la risorsa sullo stesso dominio o attivando CORS.


Grazie.

Il server web che risponde all'indirizzo my_url deve aggiungere l'header Access-Control-Allow-Origin specificando * intendendo che chiunque lo possa richiamare o specificando il nome dell'host abilitato al CORS. Se non fai questo non può funzionare solo con il supporto lato client.

robertino_salemi
11-12-2014, 13:53
Ho risolto così:

$.ajax({
url: jsonUrl,
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
dataCharset: 'jsonp',
//contentType: 'application/json',
success: function (result) {
//my_code
},
error: function (result) {
//my_code
}
});


JsonP serve ad eseguire chiamate Ajax verso altri domini.