2012-08-02 2 views
2

Sur mon code, j'ai ce rappelpost PHP prioritaire AJAX demande

$('#tagList').tagit({ 
      //Every new dag will be pushed in the list array 
      tagsChanged: function(tagValue,action,element){ 
       list.push(tagValue); 
       $.ajax({ 
        url: "dostuff.php", 
        type: "POST", 
        data:{ items:list.join("::")}, 
        success: function(data){ 
         $('#wrap').append(data); 
        } 
       }); 
      } 
     }); 

Qu'est-ce qu'il fait que chaque fois que j'ajouter une étiquette l'étiquette nouvellement ajouté sera poussé dans le tableau et après qu'il fera une AJAX post demande.

Et puis j'ai ces champs ici

<form method = "POST" action = "demo3.php"> 
News Title <input id = "news_title" type = "text" name = "news_title" /><br> 
    <label>Insert Some tags </label> 
    <ul id="tagList" data-name="demo2"> 
    </ul> 
     <input type = "submit" name = "submit" id = "submit" value = "Post News" /> 
</div> 
</form> 

et quand je clique sur le soumettre (il recharge essentiellement la page) $ _POST [ « articles »] (Ceci a été créé sur demande AJAX à chaque fois un nouveau tag est ajouté) est effacé ou supprimé dans le tableau global POST. et donc laisser mon tableau global $ _POST vide.

Y at-il de toute façon je peux fusionner ces deux? ou de toute façon de ne pas laisser override PHP ou supprimer le $_POST['items']? depuis que je serais ayant besoin d'éléments pour ma requête

Aussi je me sers d'un plugin appelé Tagit

Si les gars sont intéressés voici mon code tout

<!doctype html> 
<html> 
<head> 
    <script src="demo/js/jquery.1.7.2.min.js"></script> 
    <script src="demo/js/jquery-ui.1.8.20.min.js"></script> 
    <script src="js/tagit.js"></script> 
    <link rel="stylesheet" type="text/css" href="css/tagit-stylish-yellow.css"> 
    <script> 
    $(document).ready(function() { 
    var list = new Array(); 
     $('#tagList').tagit({ 
      //Every new dag will be pushed in the list array 
      tagsChanged: function(tagValue,action,element){ 
       list.push(tagValue); 
       $.ajax({ 
        url: "dostuff.php", 
        type: "POST", 
        data:{ items:list.join("::")}, 
        success: function(data){ 
         $('#wrap').append(data); 
        } 
       }); 
      } 
     }); 
    }); 
    </script> 
</head> 
<body> 

<div id="wrap"> 
<div class="box"> 
<button class = "viewTags">View Tags</button> 
<form method = "POST" action = "demo3.php"> 
News Title <input id = "news_title" type = "text" name = "news_title" /><br> 
    <label>Insert Some tags </label> 
    <ul id="tagList" data-name="demo2"> 
    </ul> 
     <input type = "submit" name = "submit" id = "submit" value = "Post News" /> 
</div> 
</form> 
</div> 
</body> 
</html> 

et voici dostuff. php

<?php 

     $lis = $_POST['items']; 
     $liarray = explode("::", $lis); 
     print_r($liarray); 
     print_r($_POST); 
?> 
+0

PHP ne "override" $ _POST. Ce que vous obtenez dans $ _POST est ce que PHP a reçu. Si $ _POST est vide, vous n'avez rien envoyé ou le format est incorrect. –

+0

Ohh je vois. comment pourrais-je fusionner la requête POST faite par ajax et POST reçu par PHP? puisque j'aurais besoin d'eux tous les deux. – user962206

+2

Cela n'a aucun sens. vous demandez "comment puis-je fusionner le présent que ma grand-mère envoie avec le cadeau que j'ai reçu de ma grand-mère"? À moins que votre code ne soit arrosé, il y aurait une seule requête HTTP initiée par votre code JS, en exécutant un message SINGLE sur votre script php côté serveur. –

Répondre

4

Les poignées façon dont PHP demandes sont que chaque demande est complètement séparé de tous les autres un, ce qu'on appelle parfois comme l'architecture rien partager. C'est la raison pour laquelle la requête générée par le <form> à demo3.php ne connaît pas les autres requêtes envoyées par ajax à dostuff.php est cette séparation. Ce n'est pas nécessairement spécifique au php, c'est parce que le HTTP protocol sous-jacent est sans état.

Si vous souhaitez inclure des balises dans la requête générée lors de la soumission de votre <form>, vous devez ajouter ces valeurs au formulaire. Pour cela, la bibliothèque Tagit a construit de manière contrôlée par deux options de configuration:

  1. itemName contrôle ce que le paramètre nommé (par défaut item)
  2. fieldName contrôle ce champ dans le itemName est appelé (par défaut tags)

Si vous initialisez votre plugin comme celui-ci (sans demo styles):

$('#tagList').tagit({ 
    itemName: 'article', 
    fieldName: 'tags' 
}); 

Ensuite, sur submit, les paramètres envoyés à php doivent être au $_POST['article']['tags'], les noms de paramètres générés ressembleront à article[tags][]. Voir le demos du plugin. (la source de la page a javasript des exemples joliment formatés). Par défaut, appeler simplement $('#tagList').tagit(); sans tous les rappels ou la configuration supplémentaires devrait fonctionner.

Voici comment il devrait apparaître dans le panneau net de firebug (sans parler de la démo4.php pas beeing il) shot of firebug net panel after hitting submit


Si vous voulez le faire manuellement, vous pouvez accrocher dans l'événement submit de <form> comme ceci:

$('form').on('submit', function(){ 
    var $form = $(this), 
     tags = $('#tagList').tagit('assignedTags'); // see the docs https://github.com/aehlke/tag-it/blob/master/README.markdown#assignedtags 
    $.each(tags, function(i, tag){ 
     $('<input type="hidden" name="tags[]">').attr('value', tag).appendTo($form); // using jquery to create new elements 
    }); 
}); 

En utilisant la méthode assignedTags (avec appels jquery ui schéma) du plugin tagit, vous pouvez obtenir les noms des tags, et ajouter simplement une nouvelle entrée cachée juste avant de soumettre le <form>. Rejoindre les comme ceci peut être une mauvaise idée si vous pouvez inclure n'importe quelle chaîne imaginable même ::.

Dans l'exemple, j'ai utilisé une entrée distincte pour chaque balise, donc dans votre demo3.php ils arriveront sous la forme d'un tableau (terminer le nom avec [] fait que php fait cela).

+0

Wow, il a ajouté le tag! mais le il fait écho ce "Array ([0] => [objet HTMLUListElement])" – user962206

+0

Je suis confus, ce qui a fait écho cela? – complex857

+0

Juste après avoir envoyé le formulaire j'ai utilisé print_r sur PHP r. il a montré ceci "Array ([news_title] => [soumettre] => Post Nouvelles [étiquettes] => Array ([0] => [objet HTMLUListElement]))" comment montrer les valeurs de [0] => [ object HTMLUListElement] – user962206