2011-04-03 9 views
29

Questo è davvero strano. Ho più $.post() nel codice, ma non c'è uno perché non manda i parametri json come x-www-form-urlencoded e quindi non funziona.

Ecco il codice:

$.post("/Route/SaveTransportProperties", { properties: JSON.stringify(propArray), currTravelBox: JSON.stringify(travelBoxObj), accessToken: getAccessToken()}, function(data) 
    { 
     //DO STUFF 
    }); 

L'XHR si presenta così in Firefox: Firefox screenshot

Tutte le idee perché sta succedendo questo? Ho anche forzato il tipo come "json" ma non funziona neanche.

risposta

31

Se si desidera inviare i dati come JSON quindi utilizzare la funzione $ .ajax

È possibile specificare il tipo postale e dataType JSON.

$.ajax({ 
    url: "mydomain.com/url", 
    type: "POST", 
    dataType: "xml/html/script/json", // expected format for response 
    contentType: "application/json", // send as JSON 
    data: $.param($("Element or Expression")), 

    complete: function() { 
    //called when complete 
    }, 

    success: function() { 
    //called when successful 
}, 

    error: function() { 
    //called when there is an error 
    }, 
}); 

Tratto da documentazione ajax

http://api.jquery.com/jQuery.ajax/

contentTypeString 
Default: 'application/x-www-form-urlencoded; charset=UTF-8' 
+0

Ok. Ho cancellato in modo errato il codice Ajax da qualche parte, o forse da una versione jquery vecchia o più recente, ma il problema perché ajax non funziona (vedi il mio commento sotto la risposta Olli) era bc nel tipo param che aveva "JSON" invece di "POST" –

+2

dataType specifica il tipo previsto di _response_, non i dati del post. La risposta di Olli è corretta: è necessario utilizzare $ .ajax e specificare l'opzione contentType. –

+0

Chris ha ragione, risposta modificata –

8

Perché $.post() è per l'invio di richieste di forma simile. $.ajax è per l'invio di qualsiasi cosa tu voglia. Vedere contentType nella pagina $.ajax per ulteriori informazioni.

Citazione:

Quando si invia i dati al server, utilizzare questo tipo di contenuto. L'impostazione predefinita è "application/x-www-form-urlencoded", che va bene per la maggior parte dei casi. Se si passa in modo esplicito un tipo di contenuto a $ .ajax(), verrà sempre inviato al server (anche se non viene inviato alcun dato). I dati saranno sempre trasmessi al server usando il set di caratteri UTF-8; devi decodificarlo appropriatamente dal lato server.

+1

Post è una scorciatoia per $ .ajax() quindi dovrebbe funzionare e anche che funzioni in un altro posto all'interno del mio codice. ... è proprio qui che sembra fallire. Motivo per cui non sto usando $ .ajax() perché in IE9 la modalità compat genera un'eccezione "SCRIPT87: argomento non valido." ma con $ .post() (oltre a non funzionare ... che mi fa timidare la mia domanda) non genera alcun errore. –

1

è anche possibile forzare i vostri dati per essere un JSON nella funzione successo: data = JSON.parse(data);

Problemi correlati