2012-10-19 140 views
13

我想從我在窗體中獲得的變量創建一個json對象。用變量創建json對象

var firstName = $('#firstName').val(); 
var lastName = $('#lastName').val(); 
var phone  = $('#phoneNumber').val(); 
var address = $('#address').val(); 

到目前爲止,我有下面的代碼,但它不會驗證或工作。我新來這個,請幫忙! 更改VAR這樣:

var jsonObject = 
       { 
       firstName: firstName, 
       lastName: lastName, 
       phoneNumber:phoneNumber, 
       address:address 
       } 

在JSONlint我收到此錯誤:

Parse error on line 1: varjsonObject={
^ Expecting '{', '['

+0

您確定要創建** JSON **,而不是一個而是JS對象?另外,該對象的哪些部分應該是變量?第一部分如何連接到第二部分?如果你真的想將'formObject'轉換爲JSON,那麼你是不好運氣的,因爲你不能將jQuery對象轉換爲JSON(並且在''firstName「:('#firstName')''中缺少'$')。請具體說明你想要得到的結果,現在有點混淆,因爲看起來你正在用正確的術語掙扎。 –

+0

您可能會發現在MDN JavaScript指南中詳細瞭解對象有幫助:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects。 –

+0

我想要的結果是我可以使用ajax發送的json對象。 – Anthony

回答

16

如果你需要用雙引號JSON使用JSON.stringify(object)

var $items = $('#firstName, #lastName,#phoneNumber,#address ') 
var obj = {} 
$items.each(function() { 
    obj[this.id] = $(this).val(); 
}) 

var json= JSON.stringify(obj); 

DEMO:http://jsfiddle.net/vANKa/1

8

這就是所謂的對象文本

我不知道你想要什麼你的結構是的,但根據你上面的內容,你把變量的值放在哪裏試試這個。

var formObject = {"formObject": [ 
       {"firstName": firstName, "lastName": lastName}, 
       {"phoneNumber": phone}, 
       {"address": address}, 
       ]} 

儘管這似乎更有意義(爲什麼你有上述文字的數組):

var formObject = { 
    firstName: firstName 
    ... 
} 
4

你做這樣的事情$('#lastName')時引用一個DOM元素。這是id屬性「lastName」的元素。爲什麼這樣做?你想引用存儲在局部變量中的值,完全不相關。試試這個(假設分配formObject是在同一範圍內的變量聲明) -

var formObject = { 
    formObject: [ 
     { 
      firstName:firstName, // no need to quote variable names 
      lastName:lastName 
     }, 
     { 
      phoneNumber:phoneNumber, 
      address:address 
     } 
    ] 
}; 

這似乎很奇怪,但:你創建一個對象「formObject」包含了一個名爲「formObject」成員說包含一組對象。

3

試試看看如何從字符串創建對象。

var firstName = "xx"; 
var lastName = "xy"; 
var phone  = "xz"; 
var adress = "x1"; 
var obj = {"firstName":firstName, "lastName":lastName, "phone":phone, "address":adress}; 
console.log(obj); 
2
var formValues = { 
    firstName: $('#firstName').val(), 
    lastName: $('#lastName').val(), 
    phone: $('#phoneNumber').val(), 
    address: $('#address').val() 
}; 

注意這將包含文字的對象被解釋,而不是當該對象的屬性被訪問的時間點的元素的值。你需要爲此寫一個getter。

+0

感謝您的提示。我在更新後的代碼中使用了正確的變量嗎? – Anthony

+0

@Anthony是的,它是正確的。但是,JSLint將爲您提供沒有有意義的信息,因爲您有一個** javascript對象**,而不是JSON。 – jbabey