Question

J'utilise le code suivant pour demander des données à une application ASP.net MVC. J'utilise également TcpTrace pour pouvoir voir la demande / réponse.

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();
        }
    });
}

En utilisant IE, tout fonctionne bien - le type de contenu est correctement défini sur application / json. Cependant, sous Firefox 3.5.5, le type de contenu est manquant:

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

Ceci oblige ASP.net MVC à renvoyer XML. Quelqu'un peut-il expliquer pourquoi Firefox n'envoie pas le type de contenu?

Était-ce utile?

La solution

On dirait qu'il envoie une demande d'options. La cause normale de ce problème est lorsque vous essayez d'utiliser une demande ajax à un autre domaine que certains navigateurs (y compris firefox) - voir ici ) ne permet pas.

Pouvez-vous préciser si l’URL à laquelle vous faites la demande se trouve sur un autre domaine? si tel est le cas, vous devrez utiliser jsonp ou utiliser un serveur proxy.

Autres conseils

La même chose se passe avec moi. Lorsque je lance la même requête avec Fiddler, cela fonctionne, mais lorsque je la lance avec Firefox HttpRequester, cela ne fonctionne pas. J'ai donc comparé les deux demandes et il semble que HttpRequester change les en-têtes de demande. J'ai essayé plusieurs façons de le faire fonctionner, j'ai même modifié la demande Raw, mais quand je vérifie la demande finale, le type de contenu est dupliqué, comme suit:

Content-Type: application/json, application/json

Et cela ajoute aussi un tas d'autres en-têtes. Mais quand j’ai vérifié la dernière demande de Fiddler, c’était:

Content-Type: application/json

Et donc cela a fonctionné.

J'ai également trouvé des critiques sur la page de support du produit Mozilla Firefox se plaignant d'un bogue similaire. Mais je me souviens que cela fonctionnait auparavant dans HttpRequester, donc quelque chose à voir avec la dernière version.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top