2012-01-20 33 views
7

Estoy tratando de pasar una matriz a json.stringify pero el valor devuelto vuelve vacío.pasando una matriz a json.stringify

JSON.stringify({ json: data }) // returns `{"json":[]}` 

Y aquí sería el contenido de los datos:

data[from] = "[email protected]" 
data[to] = "[email protected]" 
data[message] = "testmessage" 

jquery:

function SubmitUserInformation($group) { 
    var data = {}; 
    data = ArrayPush($group); 
    $.ajax({ 
     type: "POST", 
     url: "http://www.mlaglobal.com/components/handlers/FormRequestHandler.aspx/EmailFormRequestHandler", 
     data: JSON.stringify({ json: data }), 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     cache: false, 
     success: function (msg) { 
      if (msg) { 
       $('emailForm-content').hide(); 
       $('emailForm-thankyou').show(); 
      } 
     }, 
     error: function (msg) { 
      form.data("validator").invalidate(msg); 
     } 
    }); 
} 

function ArrayPush($group) { 
    var arr = new Array(); 
    $group.find('input[type=text],textarea').each(function() { 
     arr[$(this).attr('id')] = $(this).val(); 
    }); 
    return arr; 
} 

Respuesta

5
data = ArrayPush($group); 

se vuelve a la asignación de data a ser una matriz, por lo que todas sus propiedades expando no están siendo codificados.

Dentro de su método ArrayPush, cambie

var arr = new Array(); 

a

var obj = { }; 
+0

yep that was it. Gracias Adam – bflemi3

+0

@ bflemi3 - ¡seguro! –

+1

¡Y renómbrelo a 'obj'! – Phrogz

2

arr debe declararse como un objeto dentro de ArrayPush método, ya que no lo está utilizando como una matriz. También dentro de la función puede simplemente usar this.id y this.value, no es necesario crear el objeto jQuery. Pruebe esto

function ArrayPush($group) { 
    var arr = {}; 
    $group.find('input[type=text],textarea').each(function() { 
     arr[this.id] = this.value; 
    }); 
    return arr; 
} 
Cuestiones relacionadas