sto inviando i dati a un controller MVC e sto cercando di mantenere lo stato, nonché per la concorrenza ottimistica. Sto attualmente postando una richiesta JSON, ma sarebbe aperta a alternative praticabili?
Sono già postando una collezione nome/valore con il seguente comando:
$.ajax({
url: g_appPath + "/Rounding.aspx/Round/" + $("#OfferId").val(),
type: 'POST',
dataType: 'html',
data: $.toJSON(data), // <-- data = name/value array
contentType: 'application/json; charset=utf-8',
beforeSend: doSubmitBeforeSend,
complete: doSubmitComplete,
success: doSubmitSuccess
});
Ho anche un (criptato) array di id e timestamp che voglio passare di nuovo in modo che il server possa decifrarlo, quindi convalidare che i dati siano ancora freschi prima di salvarli.
È molto importante che l'oggetto dati sia separato e non figlio dell'uno o dell'altro o in un array di wrapper (a causa della deserializzazione riflessa sul lato server). E 'anche importante notare che io voglio fare questo in modo asincrono e non come una forma di invio.
La mia domanda è: C'è un modo posso pubblicare di nuovo gli oggetti JSON 2 usando 'application/json' come il tipo di contenuto?
La mia altra domanda è: Esiste una migliore/altro modo potrei fare questo?
grazie in anticipo!
UPDATE: Ho risolto il problema, modificando il parametro contentType su predefinito e inviando invece i dati ajax stringificati come parametri denominati separati nel querystring.
Quando si utilizza contentType: 'application/json; charset = utf-8 ', questo inserisce i dati nel corpo della richiesta, piuttosto che nella querystring. Il mio nuovo $ .ajax() posta appare come segue:
$.ajax({
url: g_appPath + "/Rounding.aspx/Round/" + $("#OfferId").val(),
type: 'POST',
dataType: 'html',
data: "RoundingData=" + $.toJSON(data) + "&StateData=" + $.toJSON(stateData),
// --removed! contentType: 'application/json; charset=utf-8',
beforeSend: doSubmitBeforeSend,
complete: doSubmitComplete,
success: doSubmitSuccess
});
Questa domanda veramente sorto a causa della mia inesperienza con questo tipo di operazione di dati, e spero che qualcuno alla ricerca di questo in futuro potrebbe incappare in questo.
grazie!
Dan
Grazie per i vostri ragazzi feedback! Apprezzo molto lo sforzo che hai fatto per aiutarmi a risolvere questo problema. Uno dei miei obiettivi era quello di evitare di avere i dati in un array involucro, che credo è forse l'unica era che si può fare con un tipo di contenuto di 'application/json; charset = utf-8' . Ho elaborato una soluzione a questo che pubblicherò come appendice alla mia domanda. – Evildonald
Solo per FYI: 'data:" RoundingData = "+ $ .toJSON (data) +" & StateData = "+ $ .toJSON (stateData)' e '{RoundingData: $. ToJSON (dati), StateData: $ .toJSON (stateData) 'sono interpretati allo stesso modo da jquery. Bene, in realtà la stringa di query verrà effettivamente convertita nell'oggetto nel grande schema di cose per l'XHR effettivo. Effettuando una chiamata GET e aggiungendo la stringa di query all'URL actualy, è possibile evitare questo problema, ma non vedo perché sarebbe importante (sono sicuro che hai una buona ragione). E, ovviamente, GET non è comunque HTTP semanticamente corretto./Rant. – KyleFarris