12
votes

JQuery: Comment arrêter la fonction Ajax ESCAPER JSON String utilisée pour poster des données

J'ai besoin de sérialiser toutes les entrées d'un formulaire dans une chaîne JSON.
Avec l'aide de Ce message , je peux créer une chaîne valide comme ci-dessous. :

var dataJSON = $.toJSON($('#form').serializeObject());
alert(dataJSON);

$.ajax({
    type: "POST",
    url: "ajax.php",
    data: 'Query01=01&Query02=02',
    dataType: 'json',
    success: function(data){
       if (data==1){
         $('#wrap').load('ajax.php',dataJSON);
       }
    }
});


2 commentaires

Vous appelez .ajax () , puis faisant une autre demande AJAX avec .charger () . Est-ce exact?


Roatin, c'est correct. L'exemple ci-dessus est simplifié de mon script actuel. Le script actuel publie des données à l'aide de $ .AJAX qui doit être validée, en cas de validation réussie, la fonction $ .Load fonction charge HTML généré à partir de données publiées par la chaîne JSON.


5 Réponses :


11
votes

Ceci est le comportement par défaut de $. Ajax () code> . Vous pouvez le modifier en définissant l'option processdata ​​code> à false code>. Voir $. Ajax () Code> Options .

processData   Boolean Default: true


3 commentaires

J'ai testé les informations que vous avez énumérées ci-dessus sans chance. D'après ce que je peux voir les options $ .Ajax n'effectuez pas la fonction de $ imbriquée. Des idées sur la façon dont je pourrais changer les mêmes options pour $ .charger?


@ticallian Je ne sais pas pourquoi vous avez besoin de la fonction de charge dans la fonction de réussite de toute façon. Pouvez-vous ne pas simplement obtenir tout ce dont vous avez besoin dans la demande $ .Ajax à l'aide de la valeur JSON?


ProcessData: False Ressourdi de rien



0
votes

Après le nettoyage de Google et du site de JQuery, je suis arrivé à la conclusion personnelle que le $. La fonction code> convertira toute variable transmise en tant que querystring (comme mon problème d'origine ci-dessus décrit) . Si vous souhaitez transmettre une chaîne JSON à travers elle, il doit être dactylographié manuellement.

Pour contourner cela, j'ai utilisé le niveau bas $. Ajax code> fonction à la place. Un avantage de l'utilisation de cette méthode signifiait que je pourrais également envoyer des données postales à l'aide de la fonction standard . Sérialiser () code> fonction plutôt que de convertir mes données de formulaire en JSON. P>

Mon code final: P>

var formData = $('#form').serialize();

$.ajax({
     type: "POST",
     url: "ajax.php",
     data: 'Query01=01&Query02=02',
     dataType: 'json',
     success: function(data){
          if (data==1){
               $.ajax({
                    type: "POST",
                    url: "ajax.php",
                    data: formData,
                    success: function(html){
                         $("#wrap").replaceWith(html);
                    }   
               });
          }
     }
});


1 commentaires

Puisque vous utilisez php comme côté serveur. Je suppose que vous auriez pu utiliser la fonction PHP Stripslashes ()



2
votes

Assurez-vous que vous

echo json_encode($_GET['varwithurl'])


0 commentaires

-2
votes
<html>
<head>
<script src="resources/jquery-2.1.0.js"></script>
<script src="resources/jquery.serializejson.min.js"></script>
</head>
<body>
  <script>

        $(document).ready(function(){

            $("#simplepost").click(function(e){

                var MyForm = $("#appForm").serializeJSON();
                console.log(MyForm);

            $.ajax(
                    {
                        url: "rest/emp/create",
                        type: "POST",
                        data: JSON.stringify(MyForm),
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success:function(maindta){
                            alert(maindta);
                        },
                        error: function(jqXHR, testStatus, errorThrown){
                            alert(errorThrown);
                        }
                    });
            e.preventDefault(); //STOP default action
        });
    });
</script>
<h2>Hello World!</h2>
<form id="appForm" method="POST">
    EmployeeID:<input type="text" name='id' value="" />
    Employee Name:<input type="text" name="name" value=""/>
<br>
<input type="button" value="Submit" id="simplepost" />
</form>
</body>
</html>

1 commentaires

Les décharges de code sans explication sont rarement utiles. S'il vous plaît envisager d'ajouter un contexte à votre réponse.



3
votes

Je l'ai fait pour que cela fonctionne avec Stripslashes forts> sur le côté PHP.

quelque chose comme ceci: p>

$data = json_decode(stripslashes($_POST['json_data']));


0 commentaires