0

次のように、フォームをページとdivにロードしています。

<script type="text/javascript">
$('#comments').load('/pages/includes/comments.php', { user:"<?=$user?>", id:"<?=$id?>"
});
</script>

ページは正常に読み込まれ、システム内のコメントは表示されますが、新しいコメントを追加しようとすると、単に機能しません。以下のcomments.php(ajaxではなくファイルを「インクルード」すると正常に機能します):

require '/home/php_/lib/dbconnect.inc';

$comments_id = mysql_real_escape_string($_POST['comments_id']);
$comments = mysql_real_escape_string($_POST['comments']);
$id = mysql_real_escape_string($_POST['id']);

/*******************************************************/
/****************** add item
/*******************************************************/

if ($_POST[additem] == '1'){ // AA

    $additem = mysql_query("
    insert into comments (
    id,
    user_id,
    comments
     )
    VALUES (
    '$id',
    '$user',
    '$comments'
    )",$db);

    if(!$additem) { echo "input error ".mysql_error(); exit; } // debug

} // close AA

/*******************************************************/
/****************** end add item
/*******************************************************/


$coms = mysql_query("select * from comments where id = '$id';",$db);
if(!$coms) { echo "coms error ".mysql_error(); exit; } // debug

if (mysql_num_rows($coms)>0){ // 55

    while($databack44 = mysql_fetch_array($coms)){ // 55

    echo '<div style="width:100%; float:left;">'.$databack44[comments].'</div>';

        } 

        } // 55

        else {  

        echo 'No Comments';

        }

?>      

<form method="post" action="#">
    <textarea name="comments"></textarea>
    <input type="submit" value="Add" class="button green">
    <input type="hidden" name="id" value="<?=$id?>">
    <input type="hidden" name="additem" value="1">
    </form>
4

2 に答える 2

2

これは、新しいコメントを送信すると、フォーム送信として機能し、AJAX のように機能しないためです。

最も簡単な方法は、別の php ファイルを使用してコメントを保存し、jquery フォームプラグインでこれをcomment.php<HEAD>のタグに 追加することです。

<HEAD>
<script src="http://malsup.github.com/jquery.form.js"></script> 
<script> 
        // wait for the DOM to be loaded 
        $(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                location.reload(); 
            }); 
        }); 
    </script> 
</HEAD>
<?php 
$coms = mysql_query("select * from comments where id = '$id';",$db);
if(!$coms) { echo "coms error ".mysql_error(); exit; } // debug

if (mysql_num_rows($coms)>0){ // 55

    while($databack44 = mysql_fetch_array($coms)){ // 55

    echo '<div style="width:100%; float:left;">'.$databack44[comments].'</div>';

        } 

        } // 55

        else {  

        echo 'No Comments';

        }


?>
<form method="post" action="function.php" id="myForm">
    <textarea name="comments"></textarea>
    <input type="submit" value="Add" class="button green">
    <input type="hidden" name="id" value="<?=$id?>">
    <input type="hidden" name="additem" value="1">
    </form>

関数.php

if ($_POST[additem] == '1'){ // AA

    $additem = mysql_query("
    insert into comments (
    id,
    user_id,
    comments
     )
    VALUES (
    '$id',
    '$user',
    '$comments'
    )",$db);

    if(!$additem) { echo "input error ".mysql_error(); exit; } // debug

} // close AA

jquery フォーム プラグインは、標準のフォーム送信機能を無効にし、フォーム データを ajax 変数として指定されたフォーム アクション urlに送信します。

function.phpにデータを送信した後、comment.phpは location.reload() によってリロードされます。

これで新しいコメントができました

于 2012-08-13T08:50:40.127 に答える
0

ねえ、ダレンはあなたを助けてうれしい...

これはこれを行う別の方法です。3ページ必要です。

  1. コメント.php
  2. 関数.php
  3. コメント.js

コメント.php

    <HEAD>
    <script>
            var id="<?php echo $_GET['id']?>"; 
            // wait for the DOM to be loaded 
            $(document).ready(function() { 
            //loading comments on page loading
              view_comment(id);
                }); 
            }); 
        </script> 
    </HEAD>

<div id="display_div"></div>
<form name="f1">
    <textarea name="comments" id="comments"></textarea>
    <input type="hidden" name="id" value="<?=$id?>">
    <input type="hidden" name="additem" value="1">
    <input type="button" value="Add" class="button green" onClick="javascript:add_comment(f1.id.value,f1.additem.value,f1.comments.value)">    
    </form>

関数.php

<?php
    //view comments
    if($_GET['action']=="view_comment"){
    $coms = mysql_query("select * from comments where id = '$id';",$db);
    if(!$coms) { echo "coms error ".mysql_error(); exit; } // debug

    if (mysql_num_rows($coms)>0){ // 55

        while($databack44 = mysql_fetch_array($coms)){ // 55

        echo '<div style="width:100%; float:left;">'.$databack44[comments].'</div>';

            } 

            } // 55

            else {  

            echo 'No Comments';

            }


    }

    //add comments
    if($_POST['additem']=="1"){
$id=$_POST['id'];
$comments=$_POST['comment'];
     $additem = mysql_query("
        insert into comments (
        id,
        user_id,
        comments
         )
        VALUES (
        '$id',
        '$user',
        '$comments'
        )",$db);

        if(!$additem) { echo "input error ".mysql_error(); exit; }

    }
?>

コメント.js

function view_comment(id){
$("#display_div").empty().html('<img src="pathtoaloadingimage" />');
   $("#display_div").load("pathtoyourfile/function.php?action=view_comment&id="+id).fadeOut('slow').hide().fadeIn('slow');

}

function add_comment(id,additem,comment){
    if(comment!=""){
 $("#display_div").empty().html('<img src="pathtoaloadingimage" />');
    $.ajax({
  type: "POST",
  url: "http://pathtoyourfile/function.php",
  data: "id="+id+"&additem="+additem+"&comment="+comment});
  $("#comments").val('');
  view_comment(id); 
    }else{
         alert('Comment is empty..! Please write something to comment.');
        return false; 
        }


}

これで、AJAX コメント ページが作成されました。

注:-読み込み中の画像をサイトに追加し、そのパスを使用するとpathtoaloadingimage、サイトの見栄えが良くなります。したがって、新しいコメントを送信すると、読み込み中の画像が表示され、同じ時点で新しいコメントが表示されます。もうリロードはありません

これがお役に立てば幸いです

于 2012-08-14T03:16:35.043 に答える