延迟动态更新以从DB获取正确的值

时间:2011-07-12 15:40:27

标签: php jquery sql delay

我有这个jQuery代码对照片进行评级,然后在数据库中更新它的评级。函数updateRating应该使用新的评级更新显示,但有时不会。我该怎么做才能确保显示正确的评级?

$("#rate").click(
                function(){
                    ratePhotoById( $("#image").attr( 'id' ) );
                    updateRating( $("#image").attr( 'id' ) );

                    return false;
                }
            );

function ratePhotoById( imageId ){
        $.post(
            "ImageRate.php",
            { ... },
            function(data) {
                // process
                // console.log(data);
            }
        );
    } 

P.S:理想情况下应该做某种回调模式。这可能吗?

2 个答案:

答案 0 :(得分:2)

编辑:根据问题的更新...

将ratePhotoById更改为:

function ratePhotoById( imageId ){  
  $.post(             
    "ImageRate.php",             
    { ... },             
    function(data) {                 
        // process                 
        // console.log(data);             
        updateRating( $("#image").attr( 'id' ) );
  }); 
}

并从click事件处理程序中删除对updateRating的调用

<强> OLD: 我猜你使用ajax来更新评级(通过ratePhotoById函数)。

在ratePhotoById ajax调用中将调用更改为updateRating函数作为Success回调的一部分 类似的东西:

function ratePhotoById(elID){
    $.ajax({
        .
        .
        .
        .
        success: function(data){
            updateRating( $("#image").attr( 'id' ) );           
        }
    });
}

答案 1 :(得分:1)

您还可以返回$ .ajax返回的延迟,这可以让您稍微分解一下。

function ratePhotoById( imageId ){
    return $.post(
        "ImageRate.php",
        { ... },
        function(data) {
            // process
            // console.log(data);
        }
    );
}

然后你可以使用deferred的done(cb)方法。这将使用AJAX请求的结果调用回调函数,无论它已经返回还是将返回静止。

$("#rate").click(function(){
    ratePhotoById( $("#image").attr( 'id' ) ).done(function() {
        // excuted after ratePhotoById() has completed successfully.
        updateRating( $("#image").attr( 'id' ) );
    });
    return false;
});

Deferred对象还有一些其他很好的方法,比如fail()和pipe()。有关详细信息,请查看延期文档:http://api.jquery.com/category/deferred-object/