0

我目前正在尝试调用一个控制器方法,该方法以 json 对象的形式返回数据,如下所示:

var url = "/campaigns/new_pair.json?id="+campaign_id+'&loser_id='+loser_id+'&winner_id='+winner_id;

        $.getJSON(url, function(){
           alert("success")
        })
        .done(function(data) {
           $pair.data('data', data);
        });

然后,当我尝试访问该数据时,我收到错误“无法读取未定义的属性'left_outfit'”

$pair.children(".vote-left").attr("data-votes",$pair.data('data').left_outfit.total_votes);

运行此代码时,成功警报确实会触发,如果我导航到我的网址,它也会返回:

{"left_outfit":{"outfit_id":1713,"c_outfit_id":1886,"liked":false,"image":"xxx","total_votes":26,"stylist":{"id":41,"image":"xxx","first_name":"xxx"}},"right_outfit":{"outfit_id":1187,"c_outfit_id":1191,"liked":false,"image":"xxx","total_votes":30,"stylist":{"id":53,"image":"xxx","first_name":"xxx"}}}

这可能是畸形的吗?

提前感谢您的任何意见。

编辑:

$pair 以这种方式定义:

Pairs.prototype = {

    // init
    _init: function () {
      var $pairs = $('body.open-lookbook-list > section > article'),
        self = this;

      $pairs.each(function (index, pair) {
        var $pair = $(pair);
        self._listeners($pair);
      });
    }

...

顺便说一句,这是使用 underscore.js,后端也是用 Rails 完成的。

4

1 回答 1

1

这里仍然有点疯狂的猜测,但这是我应该尝试的:

var $children = $pair.children(".vote-left");
$children.attr("data-votes", data.left_outfit.total_votes);

由于您收到名为 data 的 JSON,因此 $pair.data('data').left_outfit 对我来说没有多大意义。相反 data.left_outfit.total_votes 确实如此。

更新:

通过将 done 函数与 getJson 中的 success 函数结合起来,您应该能够检索到所需的数据:

$.getJSON(url, function(data) {
    $pair.data('data', data);
});
于 2013-11-12T18:57:31.557 回答