2010-05-25 21 views
5

OK, ecco la situazione: ho un CMS ospitato esternamente che funziona perfettamente per il 99% delle nostre esigenze. Comunque sulle cose più avanzate iniettavo il mio CSS + JS e faccio la magia. Il problema che sto incontrando è il caricamento di una semplice pagina HTML da chiamate jQuery.ajax(). Sembra funzionare nel senso che non vengono lanciati avvertimenti o errori; tuttavia nel mio gestore di successo (che è in esecuzione), la risposta è vuota!jQuery AJAX con due domini

Mi sono grattato la testa per l'intera mattinata cercando di capirlo e l'unica cosa che posso pensare è che ha qualcosa a che fare con il problema del dominio incrociato (anche se sembra funzionare).

iniettato JavaScript:

$(document).ready(function() { 
    doui(); 
}); 
function doui() { 
    $.ajax({ 
     url: 'http://apps.mydomain.com/css/feecalc/ui.htm', 
     cache: false, 
     success: ajax_createUI, 
     charset: "utf-8", 
     error: function(e) { 
      alert(e); 
     } 
    }); 
} 
function ajax_createUI(data, textStatus) { 
    alert(data); 
    $("#ajax-content").html(data); 
} 

mio ajax_createUI() gestore successo viene chiamato e textStatus è "successo"; tuttavia i dati sono vuoti.

Questo JS file risiede @http://apps.mydomain.com/css/js/feecalc.js tuttavia il sito web CMS (che ottiene il JS iniettato in esso) risieda @http://www.mydomain.com/

sono io solo di essere stupido o è un bug che sembra che dovrebbe funzionare, ma isn 't?

risposta

5

Questo non è un bug, è una funzionalità dei browser moderni: Same Origin Policy Ci sono tre modi per aggirare questo problema. Guardando il modo in cui hai già affrontato il problema, vorrei guardare in jsonp

+0

C'è un motivo per cui non si sta generando un errore? Presumo (e sto leggendo il tuo link) che l'origine è della pagina e non della sceneggiatura? –

+0

Ha ragione: il dominio www.natronacounty-wy.gov ottiene lo script con cui è stato incollato, quindi lo script chiama http: //apps.natronacount-wy ... dalla pagina www.natronacounty-wv.gov? – Nick

+0

corretto. Il CMS è il sistema www, nel CMS ho incollato i tag

1

Credo che il metodo più appropriata per il caricamento di una pagina è .load()

In secondo luogo, come ha detto Nick, si verificano problemi di dominio trasversali . Un'opzione sarebbe l'esecuzione di load() su una pagina del tuo sito che funge da proxy per richiedere la pagina che ti serve.

Per esempio: Si richiede .load (/myPage.aspx) e la richiesta MyPage.aspx http://apps.natronacounty-wy.gov/css/feecalc/ui.htm e restituirlo al cliente

+1

Non riesco a farlo perché www non è il mio server, è il sistema CMS del fornitore. apps È il mio server su cui è memorizzato tutto il mio JS. –

+0

@Andrew Penso che tu stia fraintendendo, dovresti scrivere il proxy sul tuo server che ha le chiamate javascript. In questo modo scrivi il tuo javascript per colpire una pagina locale/servlet che carica il contenuto remoto –

+0

@ Flash84x Non riesco a scrivere alcun codice personalizzato sul server che sarebbe in grado di effettuare il proxy delle chiamate. L'unico server a cui ho accesso è app e se potessi leggere un risultato HTTP non avrei bisogno di un proxy. –

0

Si potrebbe anche interrogare la vostra richiesta tramite YQL (Yahoo! Query Language), che risulterà in un file JSONP (supporta anche XMLP -> XML con una funzione di callback). Ciò potrebbe ridurre le prestazioni, ma Yahoo fornisce server veloci.

+0

Ho provato il plugin jQuery che utilizza YQL e ha fatto la stessa cosa :(http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/ –

+0

È davvero semplicissimo eseguire il rollover, basta scrivere la funzione di callback e la query "SELECT * da html dove url = '+ url +'", mentre si seleziona XML come output e la funzione di callback come callback. All'interno della funzione di callback, è possibile selezionare ciò che si desidera visualizzare e aggiungerlo al DOM. – fb55