0

概要

私は、Twitter で見られるのと同じ構造よりも少ないページを持っています: 投稿 ("つぶやき") フィードと、その投稿 (ツイート) へのコメントが存在する内部順序付きリスト (ol) を持つ各投稿。私はAJAXを使用して(同じページのフォームから)投稿を送信し、AJAXを使用してその特定の(または他の)投稿にコメントを送信しています。

問題

投稿に最初のコメントを送信すると、ページがリロードされます (この場合、post_comment.php に移動し、その結果が表示されます)。最初のコメントがあり、2 番目のコメントを送信すると、すべてがうまくいきます。

以下にコードを提示します。助けていただけませんか?それは非常に単純なことかもしれません。

フロー

  1. Main_page.php - jquery へのスクリプトへの宣言、jquery フォーム プラグイン、および post_comment があり、主要な構造が提示されている場所。
  2. Main_page Post - ajax (ajaxForm - jquery フォーム プラグインから) を介して main_page.php に投稿します。この投稿には、コメントを送信するために送信される 2/3 要素を含むフォームも含まれています。
  3. コメントを投稿する - 以前に送信した投稿を介して送信します。ajaxForm 経由で post_comment.php を呼び出します。記載の通り、初回(コメントolが空の時)は失敗します。最初のコメントの後、新しいコメントはページをリロードしなくても問題なく追加されます。

JS:

        $(function() {

//var this = $(this).closest('.form_wrapper-feed').next().find('.comments-feed').child("ol.post_comment_list");
var options = { 

    //clearForm: true,
    //resetForm: true,
    //beforeSubmit: ShowRequest,


    url: 'post_comment.php',
    success: function(html) 
    {

    var arrHTML = html.split('|');
        var postId = $.trim(arrHTML[0]);
        var html_code =  arrHTML[1];
        var target = 'ol#post_comment_list'+postId;
        console.log('codigo html'+html_code);
        console.log('aqui vai o post id'+postId);
        console.log('aqui vai o target'+target);
        $('ol#post_comment_list'+postId).append(html_code);
        //$('ol#post_comment_list'+postId 'li:first').slideDown('slow');
        $('.footer-post').hide();
        $('.comments-feed').delay(2000).slideUp({duration: 1000, queue: true});
        $('.small-textarea-main-feed').removeClass('set-large');
        resetForm($('.footer-comment'));
    },
    error: function()
    {
        alert('ERROR: unable to upload files');

    },
    complete: function() 
    {

        //$('form#post-question-form')[0].reset();
        //resetForm($('#post-question-form'));

    },


}; 

        $(".footer-comment").ajaxForm(options);

         function ShowRequest(formData, jqForm, options) {
         var queryString = $.param(formData);
          alert('BeforeSend method: \n\nAbout to submit: \n\n' + queryString);
          return true;
         }

function resetForm($form) {
    $form.find('input:text, input:password, input:file, select, textarea').val('');
    $form.find('input:radio, input:checkbox')
         .removeAttr('checked').removeAttr('selected');

}




     });

PHP (コメントを投稿するため)

     <?php
              include 'C:/xampp/htdocs/dh/core/init.php';
              // form registration validation
              if (empty($_POST) === false) {
                $required_fields = array('comment');

                foreach($_POST as $key => $value) {
                  if (empty($value) && in_array($key, $required_fields) === true) {
                    $errors[] = 'All fields are required';
                    break 1;
                  }
                }


                if (empty($errors) === true) {

                  // preg_match retunns an int, so it has only 2 == as oppposed to ===
                  if (strlen($_POST['comment']) > 300) {
                    $errors[] = 'Your answer must be less than 300 characters';
                  }

                }

              }
              //print_r($errors);

              ?>



              <?php 
              if (empty($_POST) === false && empty($errors) === true) {
                //register user
                $post_comment = array(
                  'comment'      => $_POST['comment'],
                  'id'      => $_POST['id'],
                  );


                //echo $post_comment['id'];

                $user_id = $_SESSION['user_id'];
                post_comment_db($user_id, $post_comment);
                  //print_r($post_question['tags']);
                echo load_comment($user_id,$post_comment);
                //add_new_comment();
                //load_top_questions();


              } else{
                echo output_errors($errors);
              }
              ?>

PHP/HTML (...次のコードで新しいコメントを追加 - post_comment.php の出力 - この部分は、分離された users.php ファイルで計算されます)

          function load_comment($user_id,$post_comment){

            $comment = $post_comment['comment'];
            $username = mysql_result(mysql_query("SELECT `username` FROM `users` WHERE `user_id` = $user_id"), 0, 'username');
            $comment_id = mysql_result(mysql_query("SELECT `comment_id` FROM `comments` WHERE `message` = '$comment'"), 0, 'comment_id');
            $timestamp = mysql_result(mysql_query("SELECT `timestamp` FROM `comments` WHERE `comment_id` = $comment_id"), 0, 'timestamp');
            //$timestamp = mysql_result(mysql_query("SELECT `timestamp` FROM `comments` WHERE `user_id` = $user_id"), 0, 'timestamp');
            $r = format_time($timestamp);

            $question_id = $post_comment['id'];

            $q = "SELECT `comment_id` FROM `question_has_comments` WHERE `question_id` = $question_id ORDER BY `timestamp` DESC LIMIT 1" ;
            $q = "SELECT `comment_id` FROM `comments` WHERE `question_id` = $question_id ORDER BY `timestamp` DESC LIMIT 1" ;

            $post_id = $post_comment['id'];

            $send_back = $post_id . '|' . '<li id="' .$post_comment['id']. '" class="post_comment">                                     

                        <div id="" class="give-margin">
                            <div id="" class="profile-page-avatar-wrapper"> 
                                <a href="#"><img id="" class="profile-page-avatar-image" src="./images/test/chemistry.jpg" alt=""></a><!--  A imagem -->
                            </div>

                            <div id="" class="profile-page-uploader-tools"> 

                                <div id="" class="profile-image-btn">
                                    <div id="" class="profile-page-btn-wrapper">
                                        <div id="" class="header-id">
                                            <a href="#"><span id="user-name">' . $username . '</span></a>   
                                        </div>
                                        <div id="" class="question-page-feed-answer-header-timer">
                                            <a id="feed-answer-header-timer" href="#"><span class="timer" data-time="">' . $r . '</span></a>
                                        </div>
                                    </div> <!-- fecha Div wrapper do botao-->
                                </div> 

                                <p>' . $post_comment['comment'] . '</p>
                            </div>                                  
                        </div>
                    </li>
                ';

            echo $send_back;
            }
4

0 に答える 0