2016-08-06 14 views
0

Ich habe ein Problem mit meiner Ajax-Funktion nur das erste Formular in meiner foreach-Schleife einzureichen.Ajax sendet nur das erste Formular in foreach Schleife

Ich habe ein Post/Kommentar-System, jeder Kommentar zu jedem Beitrag hat eine individuelle ID. Wenn ich dies ohne Ajax verwende, reichen die Kommentare gut ein und verlinken auf den richtigen Kommentar. Wenn ich dies mit Ajax versuche, bekomme ich nur die erste ID des ersten Formulars in der Schleife zu übermitteln.

Die $value->id ist die ID des Beitrags, mit dem der Kommentar verknüpft wird.

Unten ist mein Code für die Kommentarfunktion:

<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> 

Und Unten ist mein Ajax-Funktion:

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); 
} 

Ich bin ganz neu zu Ajax. Ich habe ähnliche Beiträge gesehen, habe aber Probleme, sie effektiv auf meinen Code anzuwenden.

Vielen Dank im Voraus! Sam

+0

wo ist die Schleife? – Imdad

+0

' ID; ?> 'Ist es okay? – jonju

+0

dies ist, weil 'ajax' asynchron ist, aber' for-loop' ist nicht – brk

Antwort

0

Wenn ich Sie richtig verstehe, haben Sie mehrere solcher Formulare auf der gleichen Seite, was bedeutet, dass Sie z. dies mehrmals, einmal für jede Form:

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

Dieses viele Felder mit doppelter ID erzeugt user_id genannt, was nicht erlaubt ist, da jede ID muss eindeutig sein.

Sie wählen auch nicht die Form, die Sie in irgendeiner Weise wollen, so gibt es keine Angabe, welche Wert Befehle wie _('post_id').value zurückgibt. Könnte zuerst sein oder könnte etwas anderes sein.

beheben Sie gerade Form ID zu diesem hinzufügen könnten, so dass sie einzigartig sind:

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

Alternativ gibt jeweils eine ID bilden, und diese Eingabe-Feld-IDs Namen ändern:

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

Dann müssen Sie den Selektor ändern, um das Formular mit der angegebenen ID auszuwählen, und dann das Feld mit dem angegebenen Namen ausfüllen. (Ich kenne die Syntax dafür nicht, da ich nicht weiß, welche Bibliothek Sie hier verwenden.)

+0

ist es eine Möglichkeit, jeder Form eine ID geben, dann den Ajax für diese Form nennen? Ich benutze derzeit 'on submit', um die Ajax-Funktion –

+0

aufzurufen, und beim Ausführen der PHP-Schleife erhält jedes Formular die eindeutige ID '$ value-> post_id'. –

+0

Danke Markus, das sieht so aus als wäre es das was ich suche. Ich versuche nur, rohe JS zu verwenden, um mich an die Verwendung von Ajax zu gewöhnen. Schätze die Hilfe –