我有一个java web服务,它向我返回一个json对象列表。在我的UI中,我想使用这些数据。这就是我要做的。
function loadList(){
$.get("myservice",function(data){
alert(data.list[2].key1);
}我的html中有一个元素,为此设置了onmouseover事件。如果不是这样的话,我会希望这些数据被使用。现在我还不确定什么时候会发生这种情况,而且我也不知道如何使用我从web服务获得的这个data来在这个函数之外使用。我想将数据复制到另一个临时变量,但我的json结果有时会很大。
此外,当我使用mouseover等游戏时,我将使用D3JS进行数据元素操作。
那么,有没有一种方法可以使用我从web服务获得的数据,在这个get方法之外的某个地方呢?谢谢。
发布于 2013-11-20 14:31:49
如果它只在元素上,那么使用" data ()“方法将数据存储在元素上:
function loadList(){
$.get("myservice",function(data){
$('.myElement').data('svc-data',data);
}
}然后,当您需要它在您的鼠标,只要检索它使用相同的数据方法:
$('.myelement').on('mouseover',function() {
var data = $(this).data('svc-data');
alert(data.list[2].key1);
});关于数据的文件:http://api.jquery.com/category/miscellaneous/data-storage/
更新:进一步澄清
‘s is data’是给出元素数据的“键”。data方法存储数据(对象、json、字符串等.)通过使用引用键将其与指定的元素相关联。因此,'svc- data‘是我所称的引用,因为它是来自您的服务的数据(svc = service to me)。如果您保存JSON数据(即: list.sub.item),则在检索JSON数据时仍然能够以JSON的形式访问它,因为jQuery存储的对象类型相同--不使用序列化。
第二部分展示了如何检索与元素关联的数据。当您使用$('selector').data('key') (见上文)检索数据时,数据返回到您保存的类型,并且可以这样使用。在JSON的例子中,您检索一个JSON对象,并且仍然可以像我试图用警报显示的那样使用它(即: list.sub.item)。
关键是数据与您的选择器指定的元素相关联,因此您只能通过首先引用要从中检索数据的元素来检索数据。同时,您可以在其中包含5个带有“svc-data”的元素,而不必担心冲突。
Update2:在小提琴里的例子让你明白我的意思:http://jsfiddle.net/zYdRH/
Update3:新增的一个示例是实例变量。http://jsfiddle.net/zYdRH/3/
注意所有东西是如何包装在一个匿名的、自动执行的函数中的。这是将变量和函数排除在全局范围之外的一个很好的方法。这意味着此函数中的每一项只能由此函数访问。我不能从另一个元素调用这些函数,也不能访问变量。因此,您还可以将JSON数据存储在此范围内,以便从该作用域中的任何元素中访问。我添加的最新示例有一个名为instanced的特定示例,但是所有json vars都可以以相同的方式使用--这对于一个示例来说就更明显了。但是,请注意实例是一个没有存储到任何东西的JSON对象。对范围来说是全球性的。双击一个按钮,可以看到每个按钮都显示了类关联的单词。
如果您的JSON数据对每个按钮都是唯一的,那么data()方法就是方法。但是,如果每个元素的JSON都是相同的,但是每个元素都有自己需要的部分数据,那么实例var就是最好的选择。
https://stackoverflow.com/questions/20098487
复制相似问题