2009-06-01 15 views
9

Tengo lo siguiente pero no funciona, leí en algún lugar en el stackoverflow que funciona así, pero parece que no puedo hacer que funcione ... errores ... ¿estoy haciendo algo mal?Pasando el objeto js como json a jquery?

Si hago pasar datos de este tipo - que funciona - así que sé que mi servicio está funcionando

//THIS WORKS 
data: "{one : 'test',two: 'test2' }" 


// BUT SETTING UP OBJECT doesn't work.. 

var saveData = {}; 
saveData.one = "test"; 
saveData.two = "tes2"; 


$.ajax({ 
    type: "POST", 
    url: "MyService.aspx/GetDate", 
    data: saveData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    }, 
    error: function(msg) { 
    alert('error'); 
    } 

}); 
+0

¿Cuál es el error? – cgp

+0

Como se menciona en la respuesta de Matt Winckler, el problema no está en el manejo de jQuery del objeto que le da (hace lo esperado), pero aparentemente los servicios .NET esperan que el JSON sea una cadena que luego puede analizar el lado del servidor . Incluir una biblioteca con el objetivo estricto de encadenar el objeto es innecesario en este caso. –

+0

No hay mucho daño al incluir ~ 2kb (antes de gzip) json2.js en su paquete de JavaScript. El navegador nativo que viene en navegadores como Firefox 3.5 imita los métodos en json2.js también, por lo que usar su API es una buena práctica para el futuro. –

Respuesta

21

Creo que el código va a llamar o .value .toString() en el objeto y luego pasar el cable. Quieres pasar JSON.

Por lo tanto, incluyen la biblioteca JSON Javascript

http://www.json.org/js.html

y luego pasar ...

var saveData = {}; 
    saveData.one = "test"; 
    saveData.two = "tes2"; 


    $.ajax({ 
     type: "POST", 
     url: "MyService.aspx/GetDate", 
     data: JSON.stringify(saveData),  // NOTE CHANGE HERE 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     }, 
     error: function(msg) { 
     alert('error'); 
     } 

    }); 
+0

gracias ... esto funcionó muy bien ... gracias .. –

+0

o $ .param (saveData) – Plattsy

3

Según this blog post, la razón por la que no funciona cuando intenta pasar el el objeto es que jQuery intenta serializarlo. Desde el puesto de:

En lugar de pasar ese objeto JSON a través del servicio web, jQuery serializará y enviarlo como automáticamente:

fname=dave&lname=ward 

A lo cual, el servidor responderá con:

Invalid JSON primitive: fname. 

Esto claramente no es lo que queremos que suceda. La solución es asegurarse de que está pasando jQuery una cadena para el parámetro de datos [...]

que es lo que está haciendo en el ejemplo que funciona.

3

Mi sugerencia sería utilizar el jquery-json plug-in y luego sólo se puede hacer esto en su código:

... 
data: $.toJSON(saveData), 
...