2010-03-26 34 views
9

Estoy tratando de entender cómo crear un objeto JSON en JavaScript. Este objeto JSON se pasará a una llamada JQuery ajax. Actualmente, estoy codificación dura de mi JSON y hacer mi llamada jQuery como se muestra aquí:JavaScript - Creando el objeto 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"); 
    } 
});   

Este enfoque funciona. Pero, necesito construir dinámicamente mi JSON y pasarlo a la llamada de JQuery. Sin embargo, no puedo descifrar cómo construir dinámicamente el objeto JSON. Actualmente, intento lo siguiente sin suerte:

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"); 
    } 
}); 

¿Alguien puede decirme qué estoy haciendo mal? Noté que con la segunda versión, mi servicio ni siquiera se alcanza.

Gracias

+1

¿Usted consigue los errores de Javascript? – SLaks

+0

Excelente punto: intente ejecutar esto con el depurador Firebug activado y vea lo que obtiene. –

+0

No obtengo ningún error de JavaScript. El controlador de eventos de error en mi llamada $ .ajax se está desencadenando sin embargo. – user208662

Respuesta

8

Es posible que desee ver en la JSON JavaScript library. Tiene una función stringify() que creo que hará exactamente lo que necesita.

+0

Eso es lo que pensé inicialmente, pero por el código que está usando en su ejemplo, se supone que jQuery se ocupará de esto por usted. –

+0

@Justin Ethier: no, jQuery no tiene serialización JSON (solo deserialización). jQuery hace algo completamente diferente con el objeto de datos @ user208662 que le está pasando. –

+0

@Crescent Fresh: los documentos (http://api.jquery.com/jQuery.ajax/) tienen un ejemplo de cómo hacer 'data: ({id: this.getAttribute ('id')})' – Mark

2

Esto debería funcionar

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

Por lo que yo entiendo, en JSON todas las cadenas deben ser dobles, por lo que "comentarios" y "prioridad". Ese es un objeto Javascript, por lo que si intenta mostrar solo un objeto Javascript, es válido. Para el formato JSON, sin embargo, las cadenas necesitan comillas dobles. – justkt

+0

Sí, tiene la intención de eliminarlos de la propiedad –

3

Retire las cotizaciones

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

convierte

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

JSONs no son objetos cuerdas.

2

esto funciona para mí.

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

cursiva son las variables.

+0

¿Qué sucede si los comentarios y las variables de prioridad también incluyen comillas dobles? Esto falla No es la solución ideal. – Dilshan

6

Su código:

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

sacar la cotizaciones (línea 3):

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