POST请求不返回更新的数据

时间:2014-06-23 14:17:38

标签: javascript php post

我正在我的PHP平台上实现基于Laravel 4的评论系统。

目前的问题是,当我发送新评论时,它会被保存到数据库中,但返回的评论列表不包含刚刚插入的评论。

所以,自下而上,这是注释“跟随”到达数据库之前的路径:

这个函数只是将注释的数据传递给另一个函数,管理一些UI元素,然后在一切正常的情况下检索所有注释的列表:

$("#comments-button-new").click(function() {

    var parameters = url.getURLParameters();
    var entryID = parameters.pop(); // Put this inside a data attribute

    comments.sendComment(
        $("#comments-input-comment-new").val(),
        entryID,
        $("#comments-token").val(),
        function() {

            $("#comments-alert-error").addClass('hidden');
            $("#comments-button-new").html("<span class='glyphicon glyphicon-ok'></span>");
            getComments(); // When the POST response is received comments are retrieved
        },
        function() {

            $("#comments-alert-error").removeClass('hidden');
        }
    );
});

这是实际向服务器发出POST请求的函数:

function sendComment(content, entryID, token, doneCallback, failCallback) {

    $.post("http://localhost/comment/new",
        {
            content : content,
            entryID : entryID,
            _token  : token
        })
        .done(doneCallback())
        .fail(function(xhr) {

            failCallback(xhr.response);
        });
}

这是处理评论的控制器:

public function newComment() {

    $content = Input::get('content');
    $entryID = Input::get('entryID');

    $hashids = new \Hashids\Hashids(Config::get('security.salt'), Config::get('security.minimumHashLength'));
    $entryID = $hashids->decrypt($entryID);

    $comment = new Comment();
    $result = $comment->newComment($content, $entryID[0]);

    if($result != 'OK') {

        return Response::make($result, 500);
    }

    return Response::make('OK', 200);
}

这是位于newComment模型中的Comment函数,用于将注释保存在数据库中:

public function newComment($content, $entryID) {

    $validator = Validator::make(
        array(
            'content' => $content,
            'entryID' => $entryID
        ),
        array(
            'content' => 'max:'.self::$COMMENT_MAX_LENGTH,
            'entryID' => 'exists:entries,id'
        )
    );
    if($validator->fails()) {

        return $validator->messages()->all();
    }

    $this->author        = Auth::user()->username;
    $this->content       = $content;
    $this->parentEntryID = $entryID;
    $this->save(); // Comment is saved in the Database

    return 'OK';
}

评论正确保存在数据库中,然后,在返回后您可以看到之后我想要检索所有条目的评论。问题是所有的评论都返回了。 如果我尝试重新加载页面,则返回每个评论,包括最后一个评论。

看起来getComments JS函数在注释保存在数据库之前执行。

修改

不确定是否相关,但JS功能使用 require.js

1 个答案:

答案 0 :(得分:2)

sendComment函数中,您已撰写.done(doneCallback())。也就是说,当您从服务器获得响应时,您在设置AJAX帖子时运行doneCallback - 而不是。并且您的回调函数未定义,因此不会发生任何事情。

这是一个简单的修复:用.done(doneCallback)替换该行。这样,当POST成功返回时,将调用传入doneCallback函数的sendComment,而不是在设置时。