Использование Jquery $ getJSON Как динамически создавать данные для параметра [data] после параметра Url? - PullRequest
5 голосов
/ 14 марта 2010

У меня нет проблем, чтобы заставить Json работать и анализировать возвращение JSON. Мне было просто интересно, как я могу построить динамическое «какие бы то ни было данные» и вставить его в [данные], чтобы передать оттуда мои параметры и не добавлять их вручную в URL.

Пример с сайта jquery:

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

Я думал, что смогу построить строку (которая в любом случае не имеет смысла) и поместить ее внутрь {}, но я, очевидно, не понимаю эту часть.

name: не строка, и вы не можете поместить переменную в эту часть, так как бы я динамически помещал элементы в то, что есть [данные].

ОБНОВЛЕНИЕ: Спасибо за ответы. Смогу ли я удалить имя параметра из объекта, если позже не найду правильное значение или мне нужно будет уничтожить его и воссоздать? Я использую некоторые поля выбора, чтобы выбрать вещи, и у меня может не быть чего-то выделенного, поэтому я не хочу передавать имя / значение этого параметра.

Ответы [ 4 ]

13 голосов
/ 14 марта 2010

Вы можете построить свой объект так:

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

Конечно, вам не нужно создавать объект «данные» прямо в анонимной функции; Вы можете сделать это отдельно заранее:

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

Вот как вы можете создать такой объект из набора <select> элементов на вашей странице:

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

$.getJSON(url, theData, function(jsonStuff) { ... });
7 голосов
/ 14 марта 2010

Создайте объект, затем вы можете поместить в него любые свойства, которые вам нравятся:

var data = new Object();

или:

var data = {};

Вы можете использовать синтаксис свойства:

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

или синтаксис связанного массива (который полезен, если имя параметра является ключевым словом):

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

Конечно, вы можете использовать переменные для значений и даже использовать переменные для указания имени параметра:

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

Тогда вы просто используете переменную данных в вызове:

$.getJSON("test.js", data, function(json){
   alert("JSON Data: " + json.users[3].name);
});
1 голос
/ 14 марта 2010

Вы можете сделать это:

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

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

Это то, что вы имеете в виду, или динамические параметры, а также переменные?

0 голосов
/ 14 марта 2010

{} - это javascript литерал объекта , поэтому name является свойством этого объекта.

Вы можете сделать что-то вроде этого:

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

или как-то так

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