Domanda

Sto usando il seguente codice per richiedere dati da un'applicazione ASP.net MVC. Sto anche usando TcpTrace in modo da poter vedere la richiesta / risposta.

if (isInteger($('#txtDay').val()) && isInteger($('#txtMonth').val()) && isInteger($('#txtYear').val())) {
    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: strApi + 'wip/job/getsummary/' + $('#txtYear').val() + '/' + $('#txtMonth').val() + '/' + $('#txtDay').val(),
        data: '{}',
        dataType: 'json',
        cache: false,
        beforeSend: function(XMLHttpRequest) { ShowLoading(); },
        success: function(data, textStatus) {
            ShowJobSummaryList(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            HideLoading();
            ShowStatus('unable to retrieve job summary list');
            alert(XMLHttpRequest.statusText);
            alert(textStatus);
        },
        complete: function(XMLHttpRequest, textStatus) {
            HideLoading();
        }
    });
}

Usando IE tutto funziona bene - il tipo di contenuto è correttamente impostato su application / json. Tuttavia, in Firefox 3.5.5, manca il tipo di contenuto:

OPTIONS /api/wip/job/getsummary/2009/11/25 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with

Questo fa sì che ASP.net MVC restituisca XML. Qualcuno può spiegare perché Firefox non invia il tipo di contenuto?

È stato utile?

Soluzione

Sembra che stia inviando una richiesta di opzioni. La causa normale di questo problema è quando si tenta di utilizzare una richiesta Ajax a un altro dominio che alcuni browser (incluso firefox - vedi qui ) non consente.

Puoi chiarire se l'URL a cui stai facendo la richiesta è su un altro dominio. in questo caso dovrai usare jsonp o utilizzare un proxy server.

Altri suggerimenti

Una cosa simile sta succedendo con me. Quando sparo la stessa richiesta con Fiddler funziona, ma quando lo sparo con Firefox HttpRequester, non funziona. Quindi ho confrontato entrambe le richieste e sembra che HttpRequester cambi le intestazioni delle richieste. Ho provato diversi modi per farlo funzionare, anche modificando la richiesta Raw, ma ancora quando controllo la richiesta finale il tipo di contenuto viene duplicato in questo modo:

Content-Type: application/json, application/json

E aggiunge anche un sacco di altre intestazioni. Ma quando ho verificato la richiesta finale fatta da Fiddler era solo:

Content-Type: application/json

E quindi ha funzionato.

Ho anche trovato recensioni sulla pagina di supporto del prodotto Mozilla Firefox che si lamentano di bug simili. Ma ricordo che questo ha funzionato in precedenza su HttpRequester, quindi qualcosa a che fare con l'ultima versione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top