2010-12-11 29 views
2

J'essaye de coder un formulaire qui a plusieurs textbox sans page de renvoi en utilisant ajax, puis après que chaque zone de texte sera appelé lien ajouter quel POST appelle l'autre php appelé addnew. php.données textbox non disponibles dans post variable en php et ajax

Dans les données addnew.php, nous allons ajouter à la base de données (postgres). Mais j'obtiens le problème tout en obtenant la variable de poteau elle-même. Pour le test j'ai ajouté l'alerte dans le manuscrit.

ceci est mon code pour la forme (je changerai pour plusieurs zone de texte une fois qu'il fonctionne très bien)

code de script

<script type='text/javascript'> 
//<![CDATA[ 
$(window).load(function() { 
    jQuery(document).ready(function() { 

     jQuery('.add').live('click', function(event) { 

      //var da='da='+ $('#da').attr('value'); 
      //var da = 'test'; 
      var da = $('form#myform').serialize(); 
      alert(da); 
      $.ajax({ 
       type: "POST", 
       url: "addnew.php", 
       data:da, 
       success: function(data) { 
        if (data === "ok") { 
         $(this).parent().fadeOut(); 
         $('#results').html(data); 
        } 
        else { 
         alert(data); 
        } 
       } 

      }); 
     }); 

    }); 
}); 
//]]> 
</script> 

forme de code

<body> 
<?php 

for ($i=1;$i<2;++$i) {//currently only one textbox for testing purpose 

echo "<form name='myform' id='myform'>"; 
echo "<input name='da' type='text' id='da' value='none'>"; 
echo "<a href='#' class='add'>Add</a>"; 
echo "</form>"; 
} 
?> 
<div id="results"><div> 
</body> 

Code addnew.php

<? php 
if(isset($_POST['da'])) 
{ 
    echo (da); 
} 
?> 

lorsque la page est rendue aura comme ça.

<textbox1 data> <add button> 
<textbox1 data> <add button> 
<textbox1 data> <add button> 
... 
<textbox10 data> <add button> 

ce que je suis en train est

  1. créé chaque zone de texte et ajouter le bouton paire dans chaque forme dynamiquement à l'aide pour la boucle. (pour tester j'ai créé une seule paire) .Dois-je avoir une forme pour chaque paire?
  2. lorsque l'option ajouter est cliquée dans la zone de texte (#da), elle doit être envoyée à addnew.php via ajax.

code suivant affiche les données correctement

alert(da); 

mais addnew.php fichier que je ne reçois pas $ _POST ([ 'da']). Est-ce que cela signifie que les données ne sont pas transmises au fichier ou y a-t-il quelque chose de mal dans le code ajax et finalement puis-je avoir plusieurs formulaires avec le même identifiant. Sinon, comment puis-je envoyer les seules données de la zone de texte, c'est-à-dire juste avant le bouton d'ajout lorsque le formulaire est soumis.

Répondre

0

Il n'y a pas de "soumettre". Remplacez votre élément de clic:

<a href="#" class="add">Add</a> 

avec un bouton d'envoi:

<input type="submit" class="add" value="Add" /> 

ou

<a href="#" class="add" onclick="this.form.submit();">Add</a> 
+0

cette méthode ne fonctionnera que si la cible est spécifiée Ce que j'essaie est de définir l'url pendant l'ajax, car si j'ajoute plus de bouton plus tard, l'url peut être changée pendant l'appel ajax. – kiranking

0

Je crois que le .load() $ (fenêtre) ne fonctionnera pas. la méthode de chargement JQuery utilise ajax pour saisir les données d'une URL, l'URL étant le premier argument de la méthode load, puis elle peut exécuter une fonction oncomplete lorsqu'elle est chargée de charger la réponse ajax dans l'élément appelant. il semble que vous ayez seulement mis une fonction incomplète pour la méthode de chargement, mais pas l'URL pour être ajaxée. est-ce que je me trompe? Je n'ai pas encore complètement réfléchi, mais vous voudrez peut-être supprimer ce premier niveau ($ (window) .load()), et voir ce qui se passe ensuite. Si vous faites cela, il semblerait que le code ajoutera des gestionnaires de click une fois que la page sera "prête".

+0

oui vous êtes $ (fenêtre). Load() n'est pas nécessaire du tout.Mais l'erreur stupide réelle était l'espace unique entre kiranking

1

Vous pouvez toujours modifier dynamiquement la cible/l'action d'un élément de formulaire; puisque vous utilisez jQuery, ce serait quelque chose comme ceci:

$ ('# form'). attr ('action', window.location.href);

Cela définirait un formulaire (avec l'ID de "formulaire") pour avoir une action ciblée quelle que soit l'URL de la page. Tant que vous passez le second argument à attr(), vous réinitialisez la valeur - cela fonctionne sur N'IMPORTE QUOI (vous pouvez changer href d'un lien, etc. tout à la volée)