Pergunta

Eu estou usando o código a seguir para solicitar dados de um aplicativo ASP.net MVC. Eu também estou usando tcptrace para que eu possa ver o pedido / resposta.

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 tudo bem funciona - o tipo de conteúdo está corretamente definido para application / json. No entanto, sob o Firefox 3.5.5, o tipo de conteúdo está faltando:

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

Isso faz com que o ASP.net MVC para XML retorno. Alguém pode explicar por que o Firefox não envia o tipo de conteúdo?

Foi útil?

Solução

Parece que ele está enviando uma solicitação de opções. A causa normal deste problema é quando seu tentando usar fazer uma solicitação ajax para outro domínio que alguns navegadores (incluindo firefox - veja aqui ) não permitem.

Você pode esclarecer se o URL do seu fazer o pedido para é em outro domínio. se este é o caso, você terá que usar jsonp ou usar um proxy server.

Outras dicas

Semelhante coisa está acontecendo comigo. Quando eu disparar o mesmo pedido com Fiddler ele funciona, mas quando eu demiti-lo com o Firefox HttpRequester, isso não acontece. Então eu comparei ambos os pedidos e parece que HttpRequester altera os cabeçalhos de solicitação. Eu tentei várias maneiras de fazê-lo funcionar, mesmo editado o pedido Raw, mas ainda quando eu verificar o pedido final o tipo de conteúdo é duplicado assim:

Content-Type: application/json, application/json

E ele também adiciona um monte de outros cabeçalhos. Mas quando eu verifiquei o último pedido feito pelo violinista era apenas:

Content-Type: application/json

E, portanto, trabalhou.

Eu também achei comentários sobre Mozilla Firefox suporte ao produto página que se queixam de bug similar. Mas eu lembro disso trabalhou antes em HttpRequester assim algo a ver com a versão mais recente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top