2011-11-03 13 views
6

Używam jQuery ajax do wywoływania mojej usługi WCF z HTTP POST. Odpowiedź jest kodowana GZIP, a to powoduje problemy w moim środowisku. (Patrz this question). Jeśli odpowiedź nie jest kodowana GZIP, wszystko jest w porządku.Poczta ajax - Chcę zmienić wartość nagłówka Accept-Encoding

Więc patrząc w Skrzypek, widzę, że jQuery wygenerowane zapytanie ma następujące nagłówki:

Accept-Encoding: gzip,deflate,sdch 

Jeżeli poprzez Skrzypek, i zmienić tę wartość na None, to odpowiedź nie jest skompresowany, co jest, co Chcę. Wszystko, co muszę zrobić, to zmienić wartość w nagłówku "Accept-Encoding".

Wygląda na to, że nie można zmienić tej wartości nagłówka za pomocą polecenia .ajax. (Patrz this forum post).

Czy ktoś może mi powiedzieć, jakie opcje muszę zmienić wartość tego nagłówka.

Oto moja obecna próba. Mój parametr headers wydaje się być ignorowany.

$telerik.$.ajaxSetup({ 
     accepts: 'application/json, text/javascript, */*' 
    }); 

    var parameters = { 
     "playerId": args.playerId 
    }; 

    var dataInJsonFormat = '{ "playerId": ' + args.playerId + '}'; 

    var ajaxCallParameters = { 
     accepts: 'application/json, text/javascript, */*', 
     async: true, 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer", 
     headers: { "Accept-Encoding" : "None" }, 
     type: "POST", 
     data: dataInJsonFormat, 
     dataType: 'json', 
     error: function (jqXHR, textStatus, errorThrown) { 
      var errorString = 'Error thrown from ajax call: ' + textStatus + 'Error: ' + errorThrown; 
      var displayPanel = document.getElementById('requestStatusUpdateResults'); 
      $telerik.$(displayPanel).text(errorString); 

     }, 
     success: function (data, textStatus, jqXHR) { 
      var displayPanel = document.getElementById('requestStatusUpdateResults'); 
      $telerik.$(displayPanel).text(data.d); 
     } 
    }; 

    $telerik.$.ajax(ajaxCallParameters); 
+0

Czy ta odpowiedź pomoc: http://stackoverflow.com/questions/5771878/jquery -ajax-request-change-user-agent – sberry

Odpowiedz

0

Nie jestem pewien, czy "none" jest tam poprawną opcją. Wierzę, że jeśli ustawisz nagłówki tak, aby akceptowały kodowanie "deflate" zamiast "none", to powinno rozwiązać twój problem.

np.

headers: { 'Accept-Encoding' : 'deflate' } 
+0

Dziękuję za odpowiedź, ale to nie jest problem. Problem polega na tym, że nie mogę zmienić wartości "Accept-Encoding" na nic, ani "none", ani "deflate". –

+0

Ah, rozumiem. Moja dłuższa odpowiedź powinna wtedy pomóc. – timecode

2

Wartość ta prawdopodobnie zostanie nadpisana w późniejszym etapie procesu.

Ref: http://api.jquery.com/jQuery.ajax/
headers (default: {}) description
Type: PlainObject
An object of additional header key/value pairs to send along with the request. This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

Spróbuj realizacji beforeSend jak widać w kodzie demo poniżej i wartość nagłówka (y) powinny dotrzeć do ostatecznego wniosku teraz (kciuki).

var ajaxParams = { 
    accepts: 'text/html', 
    async: true, 
    cache: false, 
    contentType: 'text/html', 
    url: 'http://www.google.com', 
    type: 'GET', 
    beforeSend: function (jqXHR) { 
     // set request headers here rather than in the ajax 'headers' object 
     jqXHR.setRequestHeader('Accept-Encoding', 'deflate'); 
    }, 
    success: function (data, textStatus, jqXHR) { 
     console.log('Yay!'); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     console.log('Oh no!'); 
    }, 
    complete: function (jqXHR, textStatus) { 
     console.log(textStatus); 
     console.log(jqXHR.status); 
     console.log(jqXHR.responseText); 
    } 
}; 

$.ajax(ajaxParams); 
2

Nie jest to możliwe z powodu wyboru odpowiedniego typu kodowania według przeglądarki. Jeśli zrobisz to

var ajaxParams = { 
accepts: 'text/html', 
async: true, 
cache: false, 
contentType: 'text/html', 
url: 'http://www.google.com', 
type: 'GET', 
beforeSend: function (jqXHR) { 
    // set request headers here rather than in the ajax 'headers' object 
    jqXHR.setRequestHeader('Accept-Encoding', 'deflate'); 
},...... 

Zobaczysz ten błąd:

Refused to set unsafe header "Accept-Encoding" 

Ref: App Engine Accept-Encoding