查询Json并传递变量?

时间:2011-06-07 14:28:01

标签: jquery json

我使用$.getJSON提取数据并将其显示在div中。我以为我会有另一个json查询来获得一个产品,但我不这样做,我想知道无论如何都要查询结果或只是抓住一些变量来传递?我需要将一条记录传递给另一页。我在这个网站上找到了这个:

var people = json.filter(function(el)
{          
   return el.Phoneno.some(function(number)
   {
       return number.Cell == "777-777-7777";     
   });
}); 

似乎我需要再次提取整个查询并解析它。是否只是将一些变量传递给另一个页面?对jQuery来说很新,如果有人可以指出我正确的方向会很棒,感谢您的帮助!

更新:

$.getJSON("myurl", function(data){
   $.each(data.myproducts, function(i,item){
      $("#products").append("<li><a href='"+item.Url+"' target='_top'><img src='"+item.image+"'></a>"
                           +"<br>"+item.Name+"<br>"+"$"+item.saleprice+"</li>");
    });
});

1 个答案:

答案 0 :(得分:3)

您可以传递JavaScript对象:

var data = {
    url: 'http://example.com',
    image: 'http://placekitten.com/200/300',
    name: 'can haz cheezburger?'
};

通过URL查询参数将其序列化为JSON:

var strData = JSON.stringify(data);
// '{"url":"http://example.com","image":"http://placekitten.com/200/300","name":"can haz cheezburger?"}'

然后对其进行网址编码:

var encodedStrData = encodeURIComponent(strData);
// '%7B%22url%22%3A%22http%3A%2F%2Fexample.com%22%2C%22image%22%3A%22http%3A%2F%2Fplacekitten.com%2F200%2F300%22%2C%22name%22%3A%22can%20haz%20cheezburger%3F%22%7D'

然后将其添加到网址的query string。如果您有这样的锚:

<a id="next" href="next/page">Next Page</a>

您可以使用jQuery修改它:

var $next = $('#next'),
    url = $next.prop('href') + '?data=' + encodedStrData;

$next.prop('href', url);

接收页面必须解压缩URL中的数据(如果存在)。


...或者你可以传递某种物品ID:

<a href="next/page?item=42">Next Page</a>

修改

试试这个,使用$.param(...)代替encodeURIComponent(JSON.stringify(...))

$.getJSON("myurl", function(data)
{
    $.each(data.myproducts, function(i,item)
    {
        var url = 'details.html?' + $.param({data: item});

        $("#products").append("<li><a href='"+url+"' target='_top'><img src='"+item.image+"'></a>"
               +"<br>"+item.Name+"<br>"+"$"+item.saleprice+"</li>");
    });
});

这绝对可以清理,但为了清楚起见,我将其保留为与原始代码类似。 CodeReview.SE是改善正确代码的绝佳资源。

然后,在接收页面上,您需要获取data参数的值。我建议使用jQuery BBQ

$(function ()
{
    var item = $.deparam.querystring().data;
    // Item is now one of the items from the JSON on the previous page.
    // Do whatever you need with it
});