【问题标题】:Populate .data() with $.getJSON()使用 $.getJSON() 填充 .data()
【发布时间】:2012-11-30 01:58:42
【问题描述】:

我正在尝试通过 JSON 填充 $('div').data()。它适用于JQuery.parseJSON,但不适用于$.getJSON

// works as expected
$('div').data('dat', { xmin: '-10', xmax: 40 });
$('div').data('dat', jQuery.parseJSON('{"bbx" : {"xmin" : "-10", "xmax" : "40"}}'));

// doesnt work
$('div').data('dat', $.getJSON("init.php", function(json) {return(json);}));

【问题讨论】:

  • 它是异步的,所以不,那行不通?另一方面,在 getJSON 的回调函数中设置数据可以正常工作,但反之则不行。
  • $.getJSON() 是异步的,请参阅 Sudhir 的回答
  • 也许美元符号被另一个框架使用了?试试jQuery.getJSON
  • 这可能会有所帮助:SO Answer

标签: javascript jquery


【解决方案1】:

你可以这样做:

$.getJSON("init.php", function(json) {
    $('div').data('dat', json);
});

【讨论】:

    【解决方案2】:

    可能是因为 getJSON 是一个异步操作。到您的成功函数执行时,原始语句现在已超出范围。

    你不能这样吗?

    $.getJSON("init.php", function (json) {
        $('div').data('dat', json);
    });
    

    【讨论】:

      【解决方案3】:

      getJSON 是一个异步的 ajax 调用,因此函数本身不返回任何内容,它只是调用适当的回调,因此您可以这样做:

      $.getJSON("init.php", function(json){
          $('div').data('dat', json);
      })
      

      注意:$.get 会将 JSON 作为字符串检索,并且不会像 getJSON 那样对其进行解析,因此如果要将 JSON 存储为字符串,请使用 $.get。存储解析的对象也可以(使用getJSON)。

      【讨论】:

      • "get 会将 JSON 作为字符串检索,并且不会像 getJSON 那样对其进行解析" 这点很好!
      【解决方案4】:

      您也可以将数据存储为数组格式:

      $.getJSON('init.php', function(data) {
          var items = [];
      
          $.each(data, function(key, val) {
              items.push(val);
          });
      
          $('div').data('dat', items)
      });
      

      【讨论】:

        猜你喜欢
        • 2018-04-09
        • 2013-06-08
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多