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 リクエストは非同期で送信されるため、失敗する理由はわかっています。問題は、コールバック内ですべてを行う正しい方法が不可能であることです。ご覧のとおり、rate (プラグイン) セットアップ内で 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"); });

戻るのではなく、別のraty属性を割り当てるだけです。

于 2012-06-19T18:45:47.047 に答える