2010-06-18 11 views
9

Sto provando a leggere xml in una pagina web da un altro server, e presumo che il mio problema sia la politica Same-Origin e quindi un problema interdominio.usa jsonp per ottenere il dominio incrociato xml

Ho un po 'di google e sembra che JSBP sia la via da seguire. Sulla base di alcuni esempi che ho trovato qui su stackoverflow e su altri siti, questo è quello che ho, e non "colpisce" il server con l'xml. Posso visualizzare l'xml in un browser.

$(document).ready(function(){  
    $.ajax({ 
     type: 'GET', 
     dataType: 'jsonp',     
     url: 'http://192.168.0.106:8111/getconfiguration?', 
     success: function (xml) 
     { //do stuff with received xml 
     }});  

Qualche suggerimento? tieni presente che sono un principiante per quanto riguarda JS/JQuery; o)

risposta

1

Se hai accesso al codice che genera l'XML sul server remoto, puoi racchiudere il tutto in jsonp.

JSONP è un modo per aggirare la politica dell'origine stessa ottenendo dati tramite tag <script> anziché tentare di estrarre informazioni da remoto.

nello script getconfiguation, si dovrebbe avere qualcosa come

callback("SERVER GENERATED XML/JSON DATA GOES HERE"); 

dove la richiamata è specificato dalla chiamata remota

Per esempio, se il vostro script remoto era php, si dovrebbe far sembrare qualcosa In questo modo:

<?php 
// getconfiguration.php 
echo "$_GET['callback']($configuration_data);" 
?> 

Quindi eseguire AJAX fornito nella domanda. Quello che fa in realtà è inserire dinamicamente un tag script nella vostra pagina come questa:

<script src="http://192.168.0.106:8111/getconfiguation.php?callback=???"></script> 

jquery compila il ??? per te con qualche involucro unico generato per il tuo successo callback

+1

Cosa succede se non si ha accesso ad esso? Puoi solo inviare/ricevere dati in formato xml. – crosenblum

+1

Se il server non è configurato per gestire interazioni di dominio, client, javascript, non è possibile forzarlo. Esistono varie soluzioni che utilizzano un proxy sul tuo server, flash o applet java. –

3

Se non hai accesso al server (se, ad esempio, stai utilizzando un'API) puoi usare YQL per convertire il tuo XML in jsonp e interrogare il server di yahoo dal browser usando un url personalizzato YQL personalizzato (in cui è incorporata un'istruzione simile a SQL). Ecco un esempio (per la zillow api):

$('document').ready(function(){ 
    $.ajax({ 
    url: 'http://query.yahooapis.com/v1/public/yql?q=select * from zillow.search where address = "1835 73rd Ave NE" and citystatezip = "98039" and zwsid = "X1-ZWz1cse68iatcb_13bwv"&format=json&diagnostics=true&env=http://datatables.org/alltables.env&callback=mydata', 
    jsonpCallback: "mydata", 
    success: function(results) { 
     console.log(results.query.results.searchresults.response.results.result.zpid); 
    }, 
    dataType: 'jsonp' 
    }); 
}); 
Problemi correlati