私はAjaxと組み合わせてデータを投稿するためのフォームを作っていました。以下はそれに関連するすべてのコードです。問題は、フォームを記入して送信するときに、最初のクリックでXHRリクエストが行われ、成功したコールバックが返され、ボタンが完了したことに変わります。AJAXが2回目の投稿に投稿する投稿
しかし、結果はデータベースに表示されません。もう一度[送信]ボタンをクリックすると、別のXHRリクエストが送信されます。これを引き起こす原因は何ですか?ありがとう!
// Method for updating the post in User.php
public function updatePost($id, $title, $content){
$query1 = $this->conn->prepare("UPDATE posts SET post_title=:post_title, post_content=:post_content WHERE post_id=:post_id");
$query1->bindparam(":post_title", $title);
$query1->bindparam(":post_content", $content);
$query1->bindparam(":post_id", $id);
try {
$query1->execute();
} catch (Exception $e) {
echo $e->getMessage();
}
} ?>
// Backend for the authenication and validation (where the form posts to)
<?php
session_start();
require_once("../User.php");
$login = new User();
$errors = [];
$post_title = $_POST['post-title'];
$post_content = $_POST['post-content'];
$post_id = $_POST['post-id'];
if(isset($post_title) && isset($post_content) && isset($post_id)){
if(empty($post_title)){
$errors[] = "The entered title is invalid in some way.";
}
elseif (empty($post_content)) {
$errors[] = "The entered content is invalid in some way.";
}
elseif(empty($post_id)){
$errors[] = "An internal error has occured, please contact the system administrator.";
}
else{
try {
if(!$login->updatePost($post_id, $post_title, $post_content)){
echo "allrighty";
}
else{
echo "charliewegotaproblem";
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
?>
// JS for the Ajax request itself
$("form").submit(function(evt){
evt .preventDefault();
var url = $(this).attr("action");
var formData = $(this).serialize();
$.ajax(url, {
data: formData,
type: "POST",
success: function(response){
if(response == "allrighty"){
$(".update-submit").prop("value", "Done!")
}
else if (response == "charliewegotaproblem") {
$(".update-submit").prop("value", "Something went wrong...")
}
}
}); // Ajax OBJECT END;
});// Submit END
予想される動作は何ですか?最初のクリック時にajaxを使用してデータベースを更新するか、2回目のクリックで 'form'を送信しますか? '!$ login-> updatePost($ post_id、$ post_title、$ post_content)'は何をしていますか? –
データベース内の投稿を更新しています。後で検索されます(CMS)。変更された投稿でデータベースを更新するはずです。これは2番目のクリックで起こります(最初のクリックでボタンのテキストが更新されますが、メソッドが正常に実行され、 "allrighty"が出力された場合にのみ発生します)。 – Uberfume
!$ login-> updatePost($ post_id、$ post_title、$ post_content)は、データベースを更新するメソッドです(コードの冒頭を参照)(EDIT:メソッドを修正するように更新) – Uberfume