2012-04-25 53 views
2

我正在显示对最初显示为选项卡的特定实体的反馈和评级。当用户点击一个标签,我正在使用奇怪的JavaScript类型铸造

$.get() 

$.get()返回是这样的

some arbit html|||8 

反馈和评价,我分裂使用|||并获得评级这是该数据8在这种情况下。

 $.get('prevfeed.php',{text:text},function(data){ 
     data = data.split("|||"); 

     $('#prevFeedback').html(data[0]); 
     $('body').data('rating', parseInt(data[1])); 
     alert(parseInt(data[1])+1); 
    }); 

问题在这里。我正在使用此plugin来显示星级评分。以下是初始化代码

 $('#star').raty({ 
     readOnly: true, 
     number : 10, 
     start: $('body').data('rating') 
    }); 

无论我做什么该评级不起作用。如果我把一个数字而不是$('body').data('rating'),它工作正常。

最初我尝试使用$('body').data('rating')设置隐藏输入字段的值,然后将输入字段的val分配给开始。但它是没用的。

在此先感谢

P.S:看到我编辑的代码

 $('#star').raty({ 
      readOnly: true, 
      number: 10, 
      start: function() { alert($('body').data('rating'););return $('body').data('rating'); } 

当我包括警报,这是工作的答案。所以这就像我只需要重视这些代码。这个怎么做。 });

+0

如果在'alert'中用'$('body')。data('rating')替换'parseInt(data [1])+ 1'。 ',你有没有在警戒中得到正确的答案? – 2012-04-25 10:23:48

+0

你确定'评级'数据是在插件初始化的时候设置的吗?这可能是一个函数在你期望的时候不会触发的问题,所以raty插件可能会在定义数据的位之前被初始化(具有未定义的值)。 – 2012-04-25 10:27:24

回答

4

这是因为在body上设置rating属性的代码会延迟到AJAX调用完成。

但是,您将在页面加载时启动raty插件;其中rating数据属性仍为undefined

你将不得不推迟插件的初始化,直到AJAX调用完成:

$.get('prevfeed.php', { 
    text: text 
}, function(data) { 
    data = data.split("|||"); 

    $('#prevFeedback').html(data[0]); 
    $('body').data('rating', parseInt(data[1])); 

    $('#star').raty({ 
     readOnly: true, 
     number: 10, 
     start: $('body').data('rating') 
    }); 
});​ 
+1

我正要写出相同的解决方案:P – 2012-04-25 10:30:44

+0

只需要补充一点,根据您(@Napster)想要做什么,您可以初始化raty为0,并使用@Matt的解决方案在正确值为准备好:) – DiogoNeves 2012-04-25 10:35:24

+0

现在我得到这个错误,像$(“#star”)。raty不是上述代码的函数 – 2012-04-25 12:38:21

0

马特给了应工作的解决方案。另一个解决方案可能是,从现在开始点击标签,从prevfeed.php获取数据并尝试相应地设置评分。

你可以试试这个。

在点击标签:

$("#star").raty ({ 
readonly: true, 
number: 10, 
start: function(){ 
//get the rating now, 
$.get('prevfeed.php',{text:text},function(data){ 
     data = data.split("|||"); 

     $('#prevFeedback').html(data[0]); 
     $('body').data('rating', parseInt(data[1])); 
    }); 
//Now you got the rating, just return it 
return $('body').data('rating'); 
} 
} 
); 

附:我没有尝试过,但它应该可以工作;)

+0

这也不起作用。而我收到了上面我已经评论过的答案的错误。此答案不会返回任何错误,但仍然无法使用评分 – 2012-04-25 12:46:24