2012-01-20 70 views
7

我試圖將一個數組傳遞給json.stringify,但返回的值是空的。傳遞一個數組到json.stringify

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

而這裏將是數據的內容:

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

回答

5
data = ArrayPush($group); 

重新分配data是一個數組,因此所有expando屬性沒有被串化。

裏面你ArrayPush方法,改變

var arr = new Array(); 

var obj = { }; 
+0

是的,就是這樣。感謝Adam – bflemi3

+0

@ bflemi3 - 當然! –

+1

並將其重命名爲「obj」! – Phrogz

2

arr應該因爲你不使用它像一個數組被聲明爲內ArrayPush方法的對象。同樣在函數內部,您可以使用this.idthis.value您不必創建jQuery對象。試試這個

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