2010-03-14 20 views
5

Tôi không gặp vấn đề gì khi Json hoạt động và phân tích cú pháp trả lại json. Tôi chỉ tự hỏi làm thế nào tôi có thể xây dựng một năng động "bất cứ dữ liệu là" và dính nó vào [dữ liệu] để vượt qua các thông số của tôi từ đó và không tự thêm chúng vào url.

Từ trang web jquery dụ:

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

tôi nghĩ rằng tôi có thể xây dựng một chuỗi (mà không có ý nghĩa anyway) và thả nó vào bên trong {}, nhưng tôi rõ ràng là không hiểu được phần nào đó.

tên: không phải là chuỗi và bạn không thể đặt biến trong phần đó, vì vậy làm cách nào tôi tự động đặt các mục vào bất kỳ [dữ liệu] nào.

CẬP NHẬT: Cảm ơn câu trả lời. Tôi có thể xóa tên tham số khỏi đối tượng nếu tôi không tìm thấy giá trị hợp lệ sau này hay tôi sẽ cần phải hủy bỏ nó và tạo lại nó? Tôi đang sử dụng một số hộp chọn để chọn mọi thứ và tôi có thể không có thứ gì được chọn nên tôi sẽ không muốn chuyển tên/giá trị tham số đó.

+0

thấy cập nhật câu trả lời của tôi – Pointy

Trả lời

13

Bạn có thể xây dựng đối tượng của bạn như thế này:

var someVar = someRandomString(); 
$.getJSON('test.js', (function() { 
    var theData = {}; 
    theData[someVar] = someRandomValue(); 
    return theData; 
})(), function(jsonStuffFromServer) { 
    alert("JSON Data: " + jsonStuffFromServer.users[3].name); 
}); 

Tất nhiên bạn không cần phải xây dựng các "dữ liệu" đối tượng ngay tại đó trong một chức năng ẩn danh; bạn có thể làm điều đó một cách riêng biệt trước:

var theData = {}; 
theData[someVariableWithANameInIt] = someRandomValue(); 
$.getJSON(url, theData, function(jsonStuff) { ... }); 

Đây là cách bạn có thể xây dựng lên như một đối tượng từ một bộ <select> yếu tố trên trang của bạn:

var theData = {}; 
$('#myForm select').filter(function() { return $(this).val() != ''; }) 
    .each(function() { 
    theData[this.name] = $(this).val(); 
    }); 

$.getJSON(url, theData, function(jsonStuff) { ... }); 
+0

Cảm ơn đã cập nhật, tôi lại Populating một lựa chọn dựa trên một Selects giá trị được chọn, vì vậy tôi đang lấy các tùy chọn đúng cư trú dựa trên các thông số nhất định có thể thay đổi động trên biểu mẫu – Breadtruck

+0

@Pointy: Nhân tiện, mã "chọn từng" cuối cùng có thể thực sự tiện dụng cho một số thứ khác :) – Breadtruck

+0

Cool! Tôi nghĩ rằng có một cách tốt hơn để lọc bằng cách sử dụng một số phép thuật trong "chọn" chính nó (phần '#myform select'), nhưng tôi không chắc chắn 100% làm thế nào để làm điều đó và tôi đã không có bất kỳ cà phê sáng nay :-) – Pointy

1

Bạn có thể làm điều này:

var myName = $("#nameField").val(); 
var myTime = $("#timeField").val(); 

$.getJSON("test.js", { 'name': myName, 'time': myTime}, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

Đó là thông số gì bạn có nghĩa là, hoặc động cũng như các biến?

+0

Có điều đó là đúng, các thông số năng động cũng – Breadtruck

0

Các {} là một object literal javascript để tên là một thuộc tính của đối tượng đó.

Bạn có thể làm một cái gì đó như thế này:

var data = {}; 
data.name = $("#input").val(); 
$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 

Hoặc một cái gì đó như thế này

var data = { 
    name: $("#input").val(), 
}; 
$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 
+1

Tôi nghĩ anh ấy muốn tham số * tên * được tính khi chạy. – Pointy

7

Tạo một đối tượng, sau đó bạn có thể đặt bất kỳ thuộc tính mà bạn thích trong nó:

var data = new Object(); 

hoặc:

var data = {}; 

Bạn có thể sử dụng cú pháp tài sản:

data.name = 'John'; 
data.time = '2pm'; 

hoặc liên kết mảng cú pháp (đó là hữu ích nếu tên tham số là một từ khóa):

data['name'] = 'John'; 
data['time'] = '2pm'; 

Bạn có thể biến sử dụng nhiên cho các giá trị và thậm chí sử dụng các biến để chỉ định tên thông số:

var param = 'name'; 
var value = 'John'; 
data[param] = value; 

Sau đó, bạn chỉ cần sử dụng biến dữ liệu trong cuộc gọi :

$.getJSON("test.js", data, function(json){ 
    alert("JSON Data: " + json.users[3].name); 
}); 
+0

Vì vậy, tôi nghĩ rằng tôi nhận được nó. Tôi có thể xóa tên thông số nếu tôi không tìm thấy giá trị hợp lệ sau này không? Tôi đang sử dụng một số hộp chọn để chọn mọi thứ và tôi có thể không có thứ gì được chọn nên tôi sẽ không muốn chuyển tên/giá trị tham số đó. – Breadtruck

+0

Bạn không phải xây dựng đối tượng trước. Chỉ cần xây dựng nó lên, '', và chỉ đưa vào đó những cái có giá trị. – Pointy

+0

Điều tôi ngụ ý là khi bạn chọn lựa chọn hàng đầu, bạn phải bắt đầu lại, vì vậy các lựa chọn thấp hơn được đặt lại để nói. – Breadtruck

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