2012-09-10 15 views
39

Quando ho ispezionare il seguente codice in Chrome console mi mostra una richiesta di intestazione Accept:undefinedPasso accetta parametro di intestazione per jquery ajax

jQuery.ajax({ 
     url: _this.attr('href'), 
     accepts: "application/json; charset=utf-8", 

    }); 
}); 

Come impostare tipo JSON accettare. Non voglio impostare un header personalizzato o utilizzare beforeSend

risposta

43

Prova questa,

$.ajax({  
    headers: {   
    Accept: "text/plain; charset=utf-8",   
    "Content-Type": "text/plain; charset=utf-8" 
    }  
    data: "data",  
    success : function(response) { 
    // ... 
    } 
}); 

Vedi questo post per riferimento:

Cannot properly set the Accept HTTP header with jQuery

+0

chcek il primo parametro http://api.jquery.com/jQuery.ajax/. So che posso passare le intestazioni, ma perché non funziona con accetta – aWebDeveloper

+0

+1 Grande, risolto il mio altro problema http://stackoverflow.com/questions/18586403/sending-html-data-through-ajax-using-spring- MVC. – ATOzTOA

26

sono disponibili due metodi alternativi per impostare accettare intestazione , che sono i seguenti:

1) setRequestHeader('Accept','application/json; charset=utf-8'); 

2) $.ajax({ 
    dataType: ($.browser.msie) ? "text" : "json", 
    accepts: { 
     text: "application/json" 
    } 
}); 
+3

Il valore 'testo' per IE mi stava uccidendo. – Peter

4

Prova questo:

$.ajax({ 
     beforeSend: function (xhr){ 
     xhr.setRequestHeader("Content-Type","application/json"); 
     xhr.setRequestHeader("Accept","text/json"); 
    }, 
    type: "POST", 
    //........ 
}); 
+1

Questa è l'unica soluzione che potrei ottenere lavorando e uso jQuery 2.0+ – pusle

4

Lei aveva già individuato il parametro di quello che si voleva e Keyur è proprio nel che vi mostra il modo corretto di impostare accetta, ma se si imposta DataType a "json" allora imposta automaticamente il valore di default di accetta il valore desiderato come da the jQuery reference. Quindi tutto ciò che serve è:

jQuery.ajax({ 
    url: _this.attr('href'), 
    dataType: "json" 
}); 
2

io uso jQuery.getJSON(url [, data ] [, success(data, textStatus, jqXHR) ]) ad esempio:

var url="my.php"; 
$.getJSON(url, myObj) 
.done(function(json) { ... }) /* got JSON from server */ 
.fail(function(jqxhr, textStatus, error) { 
    var err = textStatus + ", " + error; 
    console.log("Failed to obtain JSON data from server: " + err); 
    }); /* failed to get JSON */ 

getJSON è una scorciatoia per:

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success 
}); 
3

Anche se alcuni di loro sono corrette, ho trovato abbastanza confondendo le risposte precedenti. Allo stesso tempo, l'OP ha chiesto una soluzione senza impostare un'intestazione personalizzata o utilizzando beforeSend, quindi ho cercato una spiegazione più chiara. Spero che le mie conclusioni forniscano luce agli altri.

Il codice

jQuery.ajax({ 
    .... 
    accepts: "application/json; charset=utf-8", 
    .... 
}); 

non funziona a causa accepts deve essere un PlainObject (non un String) secondo il documento jQuery (http://api.jquery.com/jquery.ajax/). Nello specifico, jQuery prevede zero o più coppie chiave-valore relative a ogni dataType con il tipo MIME accettato per esse. Quindi quello che ho finalmente utilizzare è:

jQuery.ajax({ 
    .... 
    dataType: 'json', 
    accepts: { 
     json: 'application/json' 
    }, 
    .... 
}); 
+0

Questo non funziona per me (jQuery 1.9.1). L'intestazione Accept viene impostata su '*. *' (In Chrome e Firefox almeno). L'uso dell'opzione "intestazioni" di karthick funziona comunque. – chichilatte

+1

Sì, è un "PlainObject", ma non c'è una spiegazione di cosa dovrebbero essere le chiavi ... – nicodemus13

13

Nelle versioni recenti di jQuery, l'impostazione "dataType" per un valore appropriato imposta anche l'intestazione accetta. Ad esempio, dataType: "json" imposta l'intestazione di conferma su Accept: application/json, text/javascript, */*; q=0.01.

6

Le altre risposte non rispondono alla domanda effettiva, ma piuttosto forniscono soluzioni alternative che è un vero peccato perché ci vogliono letteralmente 10 secondi per capire quale sia la sintassi corretta per il parametro accepts.

Il parametro accepts accetta un oggetto che associa dataType all'intestazione Accept. Nel tuo caso non hai nemmeno bisogno di passare l'oggetto accepts, poiché l'impostazione del tipo di dati su json dovrebbe essere sufficiente.Tuttavia se si desidera configurare un Accept header personalizzato questo è ciò che si fa:

accepts: {"*": "my custom mime type" },

Come faccio a saperlo? Apri il codice sorgente di jquery e cerca "accetta". Il primo ritrovamento ti dice tutto quello che dovete sapere:

accepts: { 
     "*": allTypes, 
     text: "text/plain", 
     html: "text/html", 
     xml: "application/xml, text/xml", 
     json: "application/json, text/javascript" 
    }, 

Come vedete le mappature sono predefiniti per text, html, xml e json tipi di dati.

Problemi correlati