2011-09-29 18 views
5

Sto lavorando con uno script che sembra utilizzare Ext.Ajax.request (con ExtJS 3) per inviare richieste tra domini diversi, alcune delle quali richieste POST. Si sta prendendo in considerazione l'idea di allontanarsi da ExtJS3 (forse allontanarsi da ExtJS in generale) ma un rapido tentativo di utilizzare XMLHttpRequest non ha funzionato; come posso scoprire quale tecnica viene utilizzata per inviare quelle richieste cross-domain?Reverse engeering richieste POST cross domain che utilizzano Ext.Ajax.request

risposta

-2

Si può provare a utilizzare jsonp Jquery esempio:

$.ajax({ 
    url: "test.php", 
    dataType: "jsonp" 
    success: function(data){ 
    console.log(data) 
    } 
}); 

O se si ha accesso al contenuto richiesto è possibile impostare l'intestazione Access-Control-Allow-Origin. PHP esempio:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
0

Il Ext JS 3.4 online documentation vi fornirà il modello di ereditarietà Ext.Ajax classe che può essere usato per tracciare il codice sorgente correlato alla Ext.Ajax.request chiamata di metodo. Tuttavia, anziché spendere più tempo e risorse per ricreare la ruota, suggerirei di implementare la classe Ext JS Ext.data.ScriptTagProxy nativa nei tuoi negozi preesistenti tramite l'opzione di configurazione proxy, per facilitare le richieste tra domini per gli archivi remoti. Di seguito è riportato un esempio abbreviato di ciò a cui mi riferisco.

Esempio

var myJsonStore = new Ext.data.JsonStore 
({ 
    autoLoad : true, 
    proxy : new Ext.data.ScriptTagProxy 
    ({ 
     url : 'http://www.cross-domain.com/file.php' 
    }), 
    fields : ['myIdColumn','myCharColumn','myDateColumn'] 
}); 

OLTRE

Perché si ha intenzione di allontanarsi da utilizzando Ext JS si prega di checkout biblioteca ACD (AJAX Cross Domain).

+0

Ma ho intenzione di allontanarmi dall'uso di ExtJS ... non suggerisce di continuare a utilizzare ExtJS? –

+0

Non necessariamente. Stavo cercando di suggerire di iniziare rivedendo il modello di ereditarietà della classe 'Ext.Ajax' e la sua logica del metodo' request' sottostante usando la documentazione online di Ext JS 3.4. Iniziando da lì e comprendendo la gerarchia dell'ereditarietà si dovrebbe essere in grado di attraversare facilmente l'albero, identificare e rivedere i metodi della superclasse e la logica responsabile per facilitare le richieste interdominio. Il mio esempio potrebbe essere stato errato, ma era inteso a suggerire la specifica classe 'Ext.data.ScriptTagProxy' dove probabilmente troverai quello che stai cercando. –

+0

Si prega di verificare la mia aggiunta di una libreria JavaScript AJAX molto semplice e leggera che fornisce supporto per più domini. È possibile utilizzare la libreria stessa o il codice sorgente come riferimento se si è impostati sulla scrittura di una soluzione di homegrown. –

3

Attualmente sto usando ExtJS 3.3.1, non ho ancora effettuato il passaggio a 4, ma molto probabilmente quando si verificherà un nuovo progetto. Senza guardare la fonte Ext, posso dire che stanno usando JSONP per eseguire questa operazione, è l'unico modo per effettuare una chiamata AJAX tra domini perché JavaScript deve rispettare lo same-origin policy.

Stai provando a eseguire un'implementazione JS pura di JSONP? O stai già usando una libreria JS?

Modifica

Per i nostri commenti ... loro stanno facendo richieste POST. Questo non è possibile con JSONP. Quindi, per quanto posso dire, stanno usando gli inganni iframe simili. È lo stesso trucco utilizzato per caricare file "AJAX" sui browser più vecchi.

This collegamento lo spiega in modo più dettagliato.

Inoltre, lo stesso metodo (iframe to, POST, upload a file) viene utilizzato in Valum's file uploader. È molto più semplice seguire la fonte ExtJS.

+0

Ma puoi usare JSONP per inviare richieste POST? Sto guardando l'attività di rete in Firebug e la pagina sta inviando richieste POST tra domini –

+0

Ora mi hai incuriosito ... suppongo che JSONP possa solo inviare richieste GET. Vado a scavare –

+0

Io e te due uomini! –

0

JSONP è un po 'un hack, ma utilizzabile.

Tuttavia, considerare l'utilizzo di CORS se si controllano i domini attraversati. CORS implica il posizionamento di un'intestazione (Access-Control-Allow-Origin) nelle risposte dal sito Web: http://enable-cors.org/

È supportato da IE 8+ (con avvertenza, natch), Firefox e browser WebKit.L'avviso IE è questo: IE utilizza un oggetto di richiesta diverso (XDomainRequest) per le richieste CORS. Se devi supportare Opera, devi utilizzare JSONP o polyfill (qualcosa come https://github.com/gimite/web-socket-js/, che richiede Flash).

Se non si controllano i domini in questione, è possibile provare a chiedere loro di supportare CORS.

Problemi correlati