2012-08-21 5 views
5

Le richieste AJAX tra domini (creati con jQuery 1.7.2) non vengono eseguite in IE9 a meno che la richiesta dataType sia impostata su "jsonp" o "script".Richieste AJAX tra domini con IE9

Ho scoperto questo problema nell'inquadrare una richiesta in cui non mi importava della risposta e lasciava dataType non specificato (sì, so che dovrei preoccuparmi della risposta).

Così, per esempio, questo funzionerà:

$.ajax({ 
    url: "http://www.google.com", 
    type: "GET", // or "POST" 
    dataType: 'jsonp' 
}); 

ma questo non sarà:

$.ajax({ 
    url: "http://www.google.com", 
    type: "GET" // or "POST" 
}); 

Con il termine "lavoro" Voglio dire che vedo una richiesta HTTP fatta in Firebug o F12 .

Entrambe le richieste funzionano in altri browser. L'impostazione di jQuery.support.cors = true; non ha alcun effetto sul successo, né l'impostazione di crossDomain su true né la cache su false (nella richiesta AJAX).

Perché il successo di una richiesta AJAX dipende dal tipo di dati richiesto in IE? Posso capire perché potrebbe influire sulla mia capacità di lavorare con qualsiasi dato restituito; Capisco anche che alcuni server potrebbero rifiutare tutte le richieste per un determinato dataType (ma apparentemente non è il caso qui).

+3

È necessario capire cos'è JSONP. – SLaks

+0

Hai trovato una soluzione a questo? Ho lo stesso problema, IE9 + jQuery 1.7.2 che fa i POS ajax di dominio incrociato alla mia WebAPI. Ho il corretto supporto CORS costruito sul lato server che consente a FF/Chrome/Safari di funzionare correttamente. IE9 si rifiuta semplicemente di emettere la richiesta OPZIONI pre-volo per determinare il supporto CORS ... – mellodev

risposta

1

Questa non è una questione di tipo di dati, ma di verificare chiaramente, nel browser, che il server vuole davvero rispondere a questa domanda.

Imponendo JSONP si forza il server ad avere una risposta molto specifica (compresa la chiamata al metodo).

Nota che ora ci sono altre soluzioni: è possibile impostare, sul server, intestazioni specifiche (vedi https://developer.mozilla.org/en-US/docs/HTTP_access_control)

0

Se si sta eseguendo dominio croce chiamate AJAX per gestire i messaggi di forma senza ricaricare la pagina, impostare il tipo di dati a "script" ha funzionato per me.

Sarei molto interessato a collegamenti credibili a informazioni per saperne di più sul perché questo è. Mi sono tirato fuori i capelli per un paio di giorni senza capire perché tutti i browser, tranne IE9, funzionavano.

@dystroy anche dopo la messa in intestazioni, che ha permesso di FF di lavorare, ma non ha fatto un diffrence in IE9 fino a quando ho usato il tipo di dati di script

-2

Non è necessario scrivere un lungo scritto per questo. Basta semplicemente aggiungere questo codice qui sotto e vedere la magia.

$(document).ready(function(){ 
jQuery.support.cors = true; 
// call your other functions below..... 
}) 
+0

Questa è una vecchia domanda che non sono realmente interessato a perseguire ulteriormente, ma per favore nota che nel mio post iniziale dichiaro di aver provato a impostare il La proprietà 'jQuery.support.cors' a' true'. –