gpt4 book ai didi

javascript - POST 请求未返回更新的数据

转载 作者:行者123 更新时间:2023-12-02 17:16:44 24 4
gpt4 key购买 nike

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

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

因此,自下而上,这是评论在到达数据库之前“遵循”的路径:

此函数只是将评论的数据传递给另一个函数,管理一些 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);
});
}

这是处理评论的 Controller :

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);
}

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

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

最佳答案

在您的 sendComment 函数中,您编写了 .done(doneCallback())。也就是说,您在设置 AJAX 帖子时运行 doneCallback - 而不是当您从服务器获得响应时运行。而且你的回调函数是未定义的,所以什么也不会发生。

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

关于javascript - POST 请求未返回更新的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24368290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com