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
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']);
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).
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.
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 –
Ora mi hai incuriosito ... suppongo che JSONP possa solo inviare richieste GET. Vado a scavare –
Io e te due uomini! –
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.
- 1. Ext.Ajax.request che invia le richieste OPTIONS cross-domain quando jQuery.ajax invia GET
- 2. Phoneegap, cookie, richieste cross domain
- 3. Richieste cross-domain con jQuery
- 4. JQuery $ .post cross domain e credenziali
- 5. post cross domain all'app ASP.Net MVC
- 6. jquery autenticazione cross domain
- 7. come implementare la protezione CSRF per le richieste cross domain
- 8. come consentire le richieste cross domain su tomcat?
- 9. cross domain jquery get
- 10. Come utilizzare iframe su (cross-domain) post richiesta?
- 11. AngularJS + ASP.NET Web Cross-Domain Issue
- 12. Leggi risposta JSON cross domain
- 13. Jquery getJSON cross domain problems
- 14. Google Drive e CORS Cross Domain Requests
- 15. YII REST + Angular Cross Domain CORS
- 16. Che cosa rende ajax non sicuro il cross domain?
- 17. Comunicazione cross-domain, cross-tab tra le pagine di cooperazione
- 18. Abilitazione API Web ASP.net Cross Domain
- 19. Cookie cross-domain - una nuova idea
- 20. Sessione cross-domain sicura e flessibile
- 21. File cross-domain Cordova: // iframe contentwindow communication
- 22. Dashboard AJAX cross-domain con jquery
- 23. Cross Domain imposta dinamicamente l'altezza iframe
- 24. Silverlight WCF Service Cross Domain Domanda
- 25. Cross-sottodominio Richieste
- 26. Definizione di richiesta cross-domain/attacchi tra domini/protocolli interdominio
- 27. Ricevere risposta XML da Cross-Domain richiesta Ajax con jQuery
- 28. Cross-Domain AJAX non invia X-Requested-With header
- 29. App Ember App per Rails App - Cross Domain?
- 30. Le applicazioni AJAX che utilizzano le richieste POST falliscono sempre in Internet Explorer?
Ma ho intenzione di allontanarmi dall'uso di ExtJS ... non suggerisce di continuare a utilizzare ExtJS? –
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. –
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. –