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

Posted

技术标签:

【中文标题】使用 Jquery $getJSON 如何在 Url 参数之后为 [data] 参数动态创建数据?【英文标题】:Using Jquery $getJSON How do I dynamically create data for the [data] parameter after Url param? 【发布时间】:2011-01-27 09:04:01 【问题描述】:

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

来自 jquery 网站示例:

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

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

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

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

【问题讨论】:

【参考方案1】:

你可以像这样构建你的对象:

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

【讨论】:

感谢您的更新,我正在根据另一个选择的值重新填充选择,因此我正在获取正确的选项以根据可以在表单中动态更改的某些参数进行填充 @Pointy :顺便说一句,最后一个“选择每个”代码真的可以真正派上用场:) 酷!我认为通过在“选择器”本身(“#myform select”部分)中使用一些魔法来过滤有更好的方法,但我不是 100% 确定如何做到这一点,而且我今天早上没有喝任何咖啡:-)【参考方案2】:

创建一个对象,然后你可以在里面放任何你喜欢的属性:

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

【讨论】:

所以我想我明白了。如果我以后找不到有效值,是否可以删除参数名称?我正在使用一些选择框来选择一些东西,我可能没有选择一些东西,所以我不想传递那个参数名称/值。 您不必提前构建对象。只需构建它,<select> by <select>,然后只放入具有值的那些。 我的意思是,当您选择顶部选择时,您必须重新开始,因此可以说较低的选择被重置。【参考方案3】:

你可以这样做:

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

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

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

【讨论】:

【参考方案4】:

javascript object literal,因此名称是该对象的属性。

你可以这样做:

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

【讨论】:

我认为他希望在运行时计算参数 names

以上是关于使用 Jquery $getJSON 如何在 Url 参数之后为 [data] 参数动态创建数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将表头添加到使用 jQuery 中的 getJSON() 函数创建的 html 表中

Django:如何在 Jquery 中使用 $getJSON 或在 Angular.js 中使用 $http.get 接收 QuerySet?

jQuery.getJSON:如何避免在每次刷新时请求 json 文件? (缓存)

jQuery:处理 getJSON() 中的错误?

jQuery $.getJSON() 失败

jQuery 返回 $.getJSON 值