我正在尝试调用一个以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完成的。
答案 0 :(得分: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。
更新:
您应该能够通过将完成的函数与getJson中的success函数组合来检索所需的数据:
$.getJSON(url, function(data) {
$pair.data('data', data);
});