2016-09-29 58 views
0

私は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 
+0

予想される動作は何ですか?最初のクリック時にajaxを使用してデータベースを更新するか、2回目のクリックで 'form'を送信しますか? '!$ login-> updatePost($ post_id、$ post_title、$ post_content)'は何をしていますか? –

+0

データベース内の投稿を更新しています。後で検索されます(CMS)。変更された投稿でデータベースを更新するはずです。これは2番目のクリックで起こります(最初のクリックでボタンのテキストが更新されますが、メソッドが正常に実行され、 "allrighty"が出力された場合にのみ発生します)。 – Uberfume

+0

!$ login-> updatePost($ post_id、$ post_title、$ post_content)は、データベースを更新するメソッドです(コードの冒頭を参照)(EDIT:メソッドを修正するように更新) – Uberfume

答えて

0
<?php 

==>まずリターン成功メッセージ、ポスト更新クエリはupdatePost機能で正常に実行された場合

// Method for updating the post in User.php 
public function updatePost($id, $title, $content){ 
    $success = false;   // Here I changed the code 
     $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(); 
    if($query1){ $success = true; }  // Here I changed the code 
     } catch (Exception $e) { 
      echo $e->getMessage(); 
     } 
    return $success; 
    } 

==>今ここで$ログインがよりのみよりも、trueを返した場合"allrighty"が返されます

// Backend for the authenication and validation (where the form posts to) 

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)){ // Here I changed the code 
       echo "allrighty"; 
      } 
      else{ 
       echo "charliewegotaproblem"; 
      } 
     } catch (Exception $e) { 
      echo $e->getMessage(); 
     } 

    } 
} 
?> 
+0

うまくいかない。これは、バックエンドの処理方法を変更しますが、結果は変わりません。データを投稿する前にフォームを2回提出する必要があります。私はsometingはjavascriptで間違っていると思ったが、何か欠陥を見つけることができません.. – Uberfume