2010-03-14 4 views
5

Nie mam problemów z doprowadzeniem Jsona do pracy i przeanalizowaniem powrotu JSONA. Zastanawiałem się, w jaki sposób mogę zbudować dynamiczne "jakiekolwiek dane są" i wstawić je do [danych], aby przekazać moje parametry z tego miejsca, a nie ręcznie dołączyć je do adresu URL.

Od jquery stronie przykład:

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

Myślałem, że mogę zbudować ciąg (co nie ma sensu, i tak) i upuść go wewnątrz {}, ale oczywiście nie rozumiem tej części.

nazwa: nie jest ciągiem znaków i nie można wstawić zmiennej do tej części, więc w jaki sposób mogę dynamicznie wstawiać elementy do dowolnego elementu [dane].

AKTUALIZACJA: Dziękuję za odpowiedzi. Czy byłbym w stanie usunąć nazwę parametru z obiektu, jeśli później nie znajdę prawidłowej wartości, czy też powinienem ją zniszczyć i odtworzyć? Używam niektórych pól wyboru do wyboru rzeczy i może nie mam czegoś wybranego, więc nie chciałbym przekazać tej nazwy/wartości parametru.

+0

zobaczyć mój zaktualizowane odpowiedź – Pointy

Odpowiedz

13

Możesz budować swój obiekt tak:

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

Oczywiście nie trzeba budować te „dane” object tam w anonimowej funkcji; można to zrobić oddzielnie wcześniej:

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

Oto jak można zbudować taki obiekt z zestawu <select> elementów na swojej stronie:

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

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

Dzięki za aktualizację, jestem ponownego wypełniania select na podstawie kolejnych wybiera wybranych wartości, więc ja ściągam prawidłowych opcji do zapełnij na podstawie pewnych parametrów, które mogą dynamicznie zmieniać się w formularzu. – Breadtruck

+0

@Pointy: Przy okazji, ten ostatni kod "wybierz każdy" mógłby naprawdę przydać się na coś innego :) – Breadtruck

+0

Fajnie! Myślę, że jest lepszy sposób na filtrowanie za pomocą jakiejś magii w samym "selektorze" (część "#myform select"), ale nie jestem w 100% pewien, jak to zrobić i nie jadłem kawy dziś rano :-) – Pointy

1

Można to zrobić:

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

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

Czy to parametry, co masz na myśli, lub dynamiczne, jak i zmienne?

+0

Tak to prawda, parametry są dynamiczne również – Breadtruck

0

Opcja {} jest javascript object literal tak na imię właściwość tego obiektu.

można zrobić coś takiego:

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

Albo coś w tym

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

Myślę, że on chce, żeby parametry * nazwy * były obliczane w czasie działania. – Pointy

7

stworzyć obiekt, a następnie można umieścić dowolne właściwości chcesz w nim:

var data = new Object(); 

lub:

var data = {}; 

Można użyć właściwości składni:

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

lub stowarzyszonej tablicy składni (co jest przydatne, gdy nazwa parametru jest słowo kluczowe):

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

Można oczywiście zmiennych użytkowania dla wartości , a nawet użyć zmiennych do określenia nazwy parametru:

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

Następnie wystarczy użyć zmiennej danych w wywołaniu :

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

Więc myślę, że rozumiem. Czy będę mógł usunąć nazwę parametru, jeśli później nie znajdę prawidłowej wartości? Używam niektórych pól wyboru do wyboru rzeczy i może nie mam czegoś wybranego, więc nie chciałbym przekazać tej nazwy/wartości parametru. – Breadtruck

+0

Nie musisz budować obiektu z góry. Po prostu zbuduj, '' i wstaw tylko te z wartościami. – Pointy

+0

Mam jednak na myśli, że gdy wybierzesz górny wybór, musisz zacząć od nowa, aby niższe selekcje zostały zresetowane. – Breadtruck