使用Jquery $ getJSON如何在Url param之后为[data]参数动态创建数据?

时间:2010-03-14 12:10:33

标签: jquery json getjson

我没有问题让Json工作并解析json返回。我只是想知道如何构建一个动态的“无论数据是什么”并将其粘贴到[data]中以从那里传递我的参数而不是手动将它们附加到url。

来自jquery网站示例:

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

我以为我可以构建一个字符串(无论如何都没有意义)并将其放在{}内,但我显然不明白那一部分。

name:不是一个字符串,你不能在该部分中放置一个变量,所以我如何动态地将项目放入[data]中。

更新:感谢您的回答。如果我以后没有找到有效值,或者我需要销毁它并重新创建它,我是否能够从对象中删除参数名称?我使用一些选择框来选择东西,我可能没有选择的东西,所以我不想传递参数名称/值。

4 个答案:

答案 0 :(得分:13)

您可以像这样构建对象:

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) { ... });

答案 1 :(得分:7)

创建一个对象,然后你可以在其中添加你喜欢的任何属性:

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

答案 2 :(得分:1)

你可以这样做:

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

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

这是你的意思,还是动态参数以及变量?

答案 3 :(得分:0)

{}是javascript object literal,因此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);
});