jQuery pubblica JSON


194

aggiornamento: vorrei passare var valueal server

ciao, stesso vecchio, stesso vecchio ... :)

Ho un modulo chiamato <form id="testForm" action="javascript:test()">e un'area codice chiamata<code id="testArea"></code>

Sto usando questo codice per stringere e visualizzare i dati nell'area del codice:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

Quello che voglio è inviare questi dati a un file JSON. Ho lavorato su questo progetto: http://ridegrab.com/profile_old/ e se premi il Submit Querypulsante vedrai popolato il capo della pagina.

Inoltre voglio usare questo pezzo di script per inviare dati:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Ancora una volta, tutto ciò che voglio è poter inviare i dati JSON al server. Il mio server è impostato per update or POSTi dati nel posto giusto.


non riesco a farlo funzionare :) non so come metterli insieme per inviare quei dati al server ... anche se lo sostituisco datacon data: value,... !! ??
Patrioticcow,

Innanzitutto, sei sicuro che non sia un problema di connessione? Se si assegna una errorfunzione, viene chiamata? In tal caso, con quale errore?
Wiseguy,

1
Anche se ha più di un anno, risponderò all'ultima domanda di @ Patrioticcow su come farlo. Vedi l'opzione "successo" che hai inviato al metodo ajax? Fai la stessa cosa con "errore". Come in "errore: MyErrorHandlingFunction" o "errore: funzione (errore) {[Errore gestione codice qui]}"
vbullinger

Risposte:


220

'data' dovrebbe essere un oggetto JavaScript rigoroso:

data: JSON.stringify({ "userName": userName, "password" : password })

Per inviare il tuo formData, passalo a stringify:

data: JSON.stringify(formData)

Alcuni server richiedono anche il application/jsontipo di contenuto:

contentType: 'application/json'

C'è anche una risposta più dettagliata a una domanda simile qui: Jquery Ajax Pubblicazione di json su webservice


@tasos Credo che questo è ciò che stai dopo: stackoverflow.com/questions/5806971/...
Kyle selvaggio

Ripetendo l'erroneità qui; funzionerà bene per scenari semplici, ma il messaggio con codifica URL può essere molto problematico, specialmente per array di roba.
FMM,

@FMM e Jonas N - Potete aiutarmi a capire come aggiornare la mia risposta per correttezza? Gli esempi nei documenti jQuery (qui: api.jquery.com/jQuery.post ) fanno sembrare che sia possibile pubblicare un oggetto JS o una stringa, il che mi ha portato a credere che jQuery gestisse tutta la serializzazione delle stringhe necessaria .
Kyle Wild,

Patrioticcow ha detto: "E se volessi inviare il json dal valore var" A meno che il valore non sia un array o un oggetto, questo non è JSON valido.
andsens,

1
Consideriamo che cosa accade quando i dati contengono, per esempio, un elenco di cose: { foo: [1,2,3], bar: 'baz' }. Questo verrà codificato in forma come foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(senza caratteri di escape, è foo[]=1&foo[]=2&foo[]=3&bar=baz). Probabilmente non quello che vuoi sul lato server.
FMM,

271

Pubblica JSON in questo modo

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

se si passa un oggetto come settings.data jQuery lo convertirà in parametri di query e per impostazione predefinita invierà con il tipo di dati application / x-www-form-urlencoded; charset = UTF-8, probabilmente non quello che vuoi


@ TimLovell-Smith non farà alcuna differenza poiché jQuery non elaborerà una datastringa in ogni caso
Phil

2

Nel caso in cui invii questa richiesta di post a un dominio incrociato, dovresti dare un'occhiata a questo link.

https://stackoverflow.com/a/1320708/969984

Il tuo server non accetta la richiesta di post su più siti. Pertanto, è necessario modificare la configurazione del server per consentire le richieste tra siti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.