jQuery, Ajax e PHP apresentam vários tipos de dilema

Esta é uma forma muito simples que eu encontrei na web (como eu sou iniciante jQuery).

  $(document).ready(function(){ $("form#submit_wall").submit(function() { var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); });   some PHP ... while($row_pilt = mysql_fetch_assoc($select_pilt)){ print 

e abaixo é meu script PHP que grava no mySQL.

É um script muito simples. No entanto, está ficando pouco complicado quando o envio. Uma vez que eu tenho mais de um formulário na minha página (por WHILE PHP LOOP), então quando eu envio – apenas o formulário FIRST é enviado. Além disso, quaisquer outros formulários subseqüentes que envio – os dados estão sendo copiados do primeiro formulário. Existe alguma function jQuery que limpa os dados? – ou há uma solução melhor.

Obrigado, Nick

É porque você está dando a cada formulário o mesmo id e, portanto, está enviando o primeiro elemento que ele encontra com esse id, ou seja, o primeiro formulário. O que você deve fazer é atribuir um ID exclusivo a cada formulário e, em seguida, dar a cada formulário uma function de envio AJAX que envie os dados específicos do formulário. Você pode usar a function $ .each () do jQuery para percorrer todos os formulários e $ (this) .attr (‘id’) dentro da function de envio para recuperar o ID específico do formulário.

UPDATE: conforme revelado pelo comentário sobre esta resposta, você realmente não precisa da function cada () porque o jQuery o aplica a todos os elementos do formulário de qualquer maneira.

Aqui seria um script de exemplo:

 $(document).ready(function(){ $("form").submit(function() { var message_wall = $(this).children('input[type="text"]').attr('value'); var id = $(this).children('input[type="hidden"]').attr('value'); $.ajax({ type: "POST", url: "index.php?leht=pildid", data:"message_wall="+ message_wall + "&id="+ id, cache: false, success: function(){ $("ul#wall").prepend(""+message_wall+"", ""+id+""); $("ul#wall li:first").fadeIn(); alert("Thank you for your comment!"); } }); return false; }); }); 

Porque não podemos ver todas as suas form , não tenho certeza absoluta , mas, dada a sua pergunta, vou assumir que as outras formas compartilham o mesmo id ( form#submit_wall ), o que é inválido, uma id deve seja único dentro do documento.

Dado que você vai mudar o id dos outros formulários (eu sugeriria usar um nome de class , provavelmente, ‘submit_wall’, mas as especificações dependem de você), o jQuery também precisa ser alterado. A partir de:

 $("form#submit_wall").submit(function() { 

Para:

 $("form.submit_wall").submit(function() { // using the class-name instead of the id. 

Agora, é claro, você enfrenta os mesmos problemas de id duplicada.

Então eu sugiro, novamente, mudar o id para uma class e mudar:

 var message_wall = $('#message_wall').attr('value'); var id = $('#id').attr('value'); 

para:

 var message_wall = $(this).find('.#message_wall').attr('value'); var id = $(this).find('.id').attr('value'); 

Dada a bagunça que você publicou, acima, acho difícil acreditar que isso é tudo que você precisa. Definitivamente, valeria a pena publicar a página completa (ou uma demonstração em JS Fiddle ou JS Bin ) que reproduz seu código.