2016-08-06 23 views
0

私のforeachループで最初のフォームのみを送信する私のajax関数に問題があります。foreachループで最初のフォームを送信するだけです。

私はポスト/コメントシステムを持っていますが、各ポストの各コメントには個別のIDがあります。私はこれをajaxなしで使用すると、コメントはうまく提出され、正しいコメントにリンクされます。私はこれをAjaxで試してみると、ループの最初のフォームの最初のIDをサブミットすることしかできません。

$value->idは、コメントが関連付けられる投稿のIDです。以下は

<form onsubmit="submitCmt(); return false;"> 
          <div class="input-group"> 
           <input style="border-radius: 0px; box-shadow:none; border-left: none; border-right:none;" class="form-control add-comment-input" placeholder="Add a comment..." type="text" id="postCmt"> 
           <span class="input-group-btn"> 
            <input type="hidden" id="post_id" value="<?= $value->id; ?>"> 
            <input type="hidden" id="user_id" value="<?= $value->user_to; ?>"> 
            <input type="hidden" id="logged_in_id" value="<?= $logged_in_id; ?>"> 
            <button id="cmtBtn" class="btn btn-default" style="border-radius: 0px; box-shadow:none; border-right:none;">Post</button> 
           </span> 
          </div><!-- /input-group --> 
         </form> 

そして、私のAjax機能である:

function submitCmt() { 
var postCmt = _('postCmt').value; 
var post_id = _('post_id').value; 
var user_id = _('user_id').value; 
var logged_in_id = _('logged_in_id').value; 

    _("cmtBtn").innerHTML = "<i class='fa fa-spinner fa-spin fa-fw'></i>"; 
    var ajax = ajaxObj("POST", "process.php"); 
    ajax.onreadystatechange = function() { 
     if (ajaxReturn(ajax) == true) { 
      _("cmtBtn").innerHTML = ajax.responseText; 
     } 
    } 
    ajax.send('postCmt='+ postCmt + '&post_id='+post_id + '&user_id=' + user_id + '&logged_in_id='+ logged_in_id); 
} 

私はアヤックスの使用に非常に新しいですが

は、以下のコメントフォームのための私のコードです。私は同様の投稿を見てきましたが、それを私のコードに効果的に適用するのに苦労しています。

ありがとうございます!サム

+0

どこがループですか? – Imdad

+0

' id; ?> 'それは大丈夫ですか? – jonju

+0

これは 'ajax'が非同期だから' for-loop'が – brk

答えて

0

あなたが正しく理解している場合、同じページに複数のフォームがあります。各フォームのため、一度これを数回、:

<input type="hidden" id="user_id" value="<?= $value->user_to; ?>"> 

これは、各IDが一意でなければならないため、許可されていないuser_idと呼ばれる重複したIDを持つ多くのフィールドを作成します。

また、フォームを選択しないでください。_('post_id').valueのような値のコマンドが返されません。最初のものであっても、別のものであってもかまいません。

<input type="hidden" id="user-<?= $value->post_id; ?>" value="<?= $value->user_to; ?>"> 

はまた、それぞれにidを形成与える、との名前であることを、これらの入力フィールドIDを変更します:

<form id="form-<?= $value->post_id; ?>" onsubmit="submitCmt(); return false;"> 
... 
<input type="hidden" name="user_id" value="<?= $value->user_to; ?>"> 

は、彼らが一意になるように、あなただけのこれらのフォームIDを追加することができます修正するには

次に、セレクタを変更して、指定されたIDを持つフォームを選択し、その内部に指定の名前でフィールドを入力する必要があります。 (私はここでどのライブラリを使用しているのかわからないので、これについての構文はわかりません)

+0

間のより多くのコードがあります方法はあり各フォームにidを指定してそのフォームのajaxを呼び出すことはできますか?私は現在、ajax関数 –

+0

を呼び出すために 'on submit'を使用し、PHPループを実行すると、各フォームは一意のIDの '$ value-> post_id'を取得します。 –

+0

ありがとうMarkus、それは私が探しているように見えます。私は生のJSを使ってAjaxの使用に慣れさせようとしています。助けを感謝する –

関連する問題