2012-10-19 88 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