0

我被迫使用该函数之外的 getJSON 回调函数中的数据。看一看:

$('#stars').raty({
        score: function() {
            var $value = 0;
            var $id = <?=$id?>;
            $.getJSON("getuserrating.php?id=" + $id, function(data) {
                $.each(data, function(key, val) {
                    $value = val;
                });
            });
            return $value;
        },
    });

这是我尝试过的,但失败了,$value 仍然设置为 0,尽管在回调中它肯定设置为实际值。我知道它为什么会失败,因为 AJAX 请求是异步发送的。问题是,在回调中做所有事情的正确方法是不可能的。如您所见,我需要在比率(插件)设置中检索 JSON 对象。我只会使用 $.ajax() 并将其设置为同步,但文档将其标记为 1.8 已弃用。我宁愿不介绍我知道将来会弃用的解决方案。

有没有办法做到这一点?也许我只是只见树木不见森林,摆在我面前的是一个简单的解决方案。提前致谢 :)

4

2 回答 2

4

如果您需要使用 ajax 来获取分数,则方法是倒退的。

首先进行ajax调用,然后将值传递给scoreajax成功

$.getJSON("getuserrating.php?id=" + $id, function(data) {
          /* pseudo code here since I don't know the plugin and it's data requirments*/
         var score= data.score;
         $('#stars').raty({
             score: score
         });      
});

编辑:您仍然可以通过这种方式将数据传递给分数函数

于 2012-06-19T18:49:19.700 回答
0

也许这(取自 jquery getJSON api doc http://api.jquery.com/jQuery.getJSON/)可以工作:

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });

只需分配另一个比率属性而不是返回。

于 2012-06-19T18:45:47.047 回答