2010-03-26 14 views
9

Sto cercando di capire come creare un oggetto JSON in JavaScript. Questo oggetto JSON verrà passato a una chiamata ajax JQuery. Attualmente sto codificando il mio JSON e faccio la mia chiamata JQuery come mostrato qui:JavaScript - Creazione dell'oggetto JSON

$.ajax({ 
    url: "/services/myService.svc/PostComment", 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: '{"comments":"test","priority":"1"}', 
    dataType: "json", 
    success: function (res) { 
    alert("Thank you!"); 
    }, 
    error: function (req, msg, obj) { 
    alert("There was an error"); 
    } 
});   

Questo approccio funziona. Ma ho bisogno di creare dinamicamente il mio JSON e passarlo alla chiamata JQuery. Tuttavia, non riesco a capire come creare dinamicamente l'oggetto JSON. Attualmente, sto provando quanto segue senza fortuna:

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { "comments":comments,"priority":priority }; 

$.ajax({ 
    url: "/services/myService.svc/PostComment", 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    data: json, 
    dataType: "json", 
    success: function (res) { 
    alert("Thank you!"); 
    }, 
    error: function (req, msg, obj) { 
    alert("There was an error"); 
    } 
}); 

Qualcuno può dirmi per favore cosa sto facendo male? Ho notato che con la seconda versione, il mio servizio non è nemmeno stato raggiunto.

Grazie

+1

si fa a ottenere eventuali errori JavaScript? – SLaks

+0

Punto eccellente: prova a eseguirlo con il debugger di Firebug attivato e guarda cosa ottieni. –

+0

Non ricevo errori JavaScript. Tuttavia, il gestore di eventi di errore nella mia chiamata $ .ajax viene attivato. – user208662

risposta

8

Si consiglia di guardare il JSON JavaScript library. Ha una funzione stringify() che penso farà esattamente quello che ti serve.

+0

Questo è quello che pensavo inizialmente, ma dal codice che sta usando nel suo esempio, jQuery dovrebbe occuparsi di questo per te. –

+0

@Justin Ethier: no, jQuery non ha serializzazione JSON (solo deserializzazione). jQuery fa qualcosa di completamente diverso con l'oggetto dati @ user208662 ci sta passando. –

+0

@Crescent Fresh: i documenti (http://api.jquery.com/jQuery.ajax/) hanno un esempio di fare 'data: ({id: this.getAttribute ('id')})' – Mark

2

Questo dovrebbe funzionare

var json = { comments: "comments",priority: "priority" }; 
+2

Per quanto ne so, in JSON tutte le stringhe devono essere doppiamente citate, quindi "commenti" e "priorità". Questo è un oggetto Javascript, quindi se stai cercando di mostrare solo un oggetto Javascript, è valido. Per il formato JSON, tuttavia, le stringhe richiedono doppi apici. – justkt

+0

Sì, hai ragione, volevo solo rimuoverli dalla proprietà –

3

Rimuovere le citazioni

data: '{"comments":"test","priority":"1"}', 

diventa

data: {"comments":"test","priority":"1"}, 

JSONs non sono oggetti stringhe.

2

questo funziona per me.

var json = "{ 'comments': '" + *comments* +"','priority:' '" + *priority* +"' }"; 

in corsivo sono le variabili.

+0

Cosa succede se i commenti e le variabili prioritarie includono anche le virgolette doppie? Questo fallisce. Non la soluzione ideale. – Dilshan

6

tuo codice:

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { "comments":comments,"priority":priority }; 

Estrarre le virgolette (linea 3):

var comments = $("#commentText").val(); 
var priority = $("#priority").val(); 
var json = { comments: comments, priority: priority };