2012-10-19 44 views
13

Tôi đang cố tạo một đối tượng json từ các biến mà tôi nhận được trong một biểu mẫu.tạo đối tượng json với các biến

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

Cho đến nay tôi có mã bên dưới nhưng sẽ không xác thực hoặc hoạt động. Im mới này, xin vui lòng giúp đỡ! Thay đổi var này:

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

trong JSONlint tôi đang nhận được lỗi này:

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

+0

Bạn có chắc chắn bạn muốn tạo ** JSON ** và không thay một đối tượng JS? Ngoài ra, những phần nào của vật thể được cho là biến? Phần đầu tiên được kết nối với phần thứ hai như thế nào? Nếu bạn thực sự muốn chuyển đổi 'formObject' thành JSON, thì bạn sẽ không may, vì bạn không thể chuyển đổi các đối tượng jQuery thành JSON (và bạn đang thiếu' $ 'trong' "firstName": ('#firstName') '). Xin được cụ thể về kết quả bạn muốn nhận được, ngay bây giờ nó là một chút bối rối vì có vẻ như bạn đang đấu tranh với các thuật ngữ đúng. –

+0

Bạn có thể thấy hữu ích khi đọc thêm về đối tượng trong Hướng dẫn JavaScript MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects. –

+0

kết quả tôi muốn là đối tượng json mà tôi có thể gửi bằng ajax. – Anthony

Trả lời

16

nếu bạn cần gấp đôi trích dẫn sử dụng 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

Nó được gọi là trên Object Literal

Tôi không chắc chắn những gì bạn muốn cấu trúc của bạn để được, nhưng theo những gì bạn có ở trên, nơi bạn đặt các giá trị trong các biến, hãy thử điều này.

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

Mặc dù điều này dường như có ý nghĩa hơn (Tại sao bạn có một mảng trong nghĩa đen ở trên?):

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

Bạn đang tham khảo một phần tử DOM khi làm một cái gì đó giống như $('#lastName'). Đó là một phần tử có thuộc tính "lastName" là id. Tại sao vậy? Bạn muốn tham chiếu giá trị được lưu trữ trong một biến cục bộ, hoàn toàn không liên quan. Hãy thử điều này (giả sử sự phân công để formObject là trong phạm vi tương tự như khai báo biến) -

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

Điều này có vẻ rất kỳ quặc mặc dù: bạn đang tạo một đối tượng "formObject" có chứa một thành viên gọi là "formObject" mà chứa một mảng các đối tượng.

3

Hãy thử cách này để xem cách bạn có thể tạo đối tượng từ chuỗi.

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

Chú giải này sẽ chứa các giá trị của các yếu tố tại thời điểm đối tượng theo nghĩa đen đã giải thích, không phải khi các thuộc tính của đối tượng được truy cập. Bạn sẽ cần phải viết một getter cho điều đó.

+0

Cảm ơn mẹo. Có phải cách tôi đã sử dụng các biến đúng trong mã được cập nhật của tôi không? – Anthony

+0

@Anthony Vâng, đúng vậy. Tuy nhiên, JSLint sẽ cung cấp cho bạn không có thông tin có ý nghĩa bởi vì bạn có một đối tượng ** javascript **, chứ không phải JSON. – jbabey

Các vấn đề liên quan