0
votes

Possible exécuter plusieurs ajax de cette façon?

Je veux exécuter une requête Ajax pour obtenir la "Datum" de la réponse "Testerid". Ensuite, je veux exécuter le second Ajax avec le "Datum" précédemment reçu avec cette valeur sur une autre page, une entrée de dB.

Voici le code qui ne fonctionne pas. P>

$(document).ready(function(){

var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 

        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var len = response.length;

                $("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
                for( var i = 0; i<len; i++){
                    var CID = response[i]['CID'];
                    var Datum = response[i]['Datum'];

                    $("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");

                }
            }
        });


    $("#TesterID").change(function(){ /* Wenn du änderst und vom Select Feld auswählst */
        var TesterID = $(this).val(); /* value der Tester erhalten */ 

        $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID.php',
            type: 'get', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var len = response.length;

                $("#Teststart").empty(); /* Die erhaltenden Daten werden bei der ID angezeigt */
                for( var i = 0; i<len; i++){
                    var CID = response[i]['CID'];
                    var Datum = response[i]['Datum'];

                    $("#Teststart").append("<option value='"+Datum+"'>"+Datum+"</option>");

                }
            }
        });
    });

});


15 commentaires

C'est beaucoup de code pour nous deviner. Pouvez-vous élaborer sur ce que "ne fonctionne pas" signifie dans ce cas? Lorsque vous déboguez, où / comment cela échoue spécifiquement?


"Ne fonctionne pas" ne fonctionne pas comme une description de problème, et si vous le disiez comme un développeur, cela signifie principalement que vous ne fonctionne pas. " S'il vous plaît aller lire Comment demander , puis nous donner une description appropriée du problème. Et si vous comptez uniquement sur votre code pour expliquer ce qui se passe aux gens ici, ces commentaires devraient au moins être en anglais aussi.


Est-il possible de supprimer le succès des options dans les deuxième et troisième $ .AJAX? Je n'ai pas besoin des variables d'écho json_encode de l'autre page PHP.


Si vous pouvez éviter de faire une deuxième / troisième demande au même serveur pour une seule opération, ce serait une bonne chose. Essayez de faire connaître toute votre logique de serveur dans une demande.


@David et reposez la requête SQL Server sur mon autre page ne mettez pas la mise à jour avec l'AJAX appelée Valeurs. Donc, ma question n'est que dans cet article est-il possible de gérer 2 requêtes Ajax comme ceci?


@Daniel: Oui, il est possible d'exécuter plusieurs demandes AJAX. Les sites Web font cela tout le temps. Si vous avez quelque chose de spécifique qui échoue de manière spécifique, nous pourrons peut-être aider avec cela, si vous pouvez fournir des détails sur ce qui manque et comment cela échoue. "La requête SQL sur mon autre page ne met pas à jour" n'est pas vraiment quelque chose que nous pouvons aider. Lorsque vous déboguez, la demande AJAX en question contient-elle les valeurs que vous attendez? Quelle est la réponse du serveur? Quelle est la requête exécutée? Quelles sont les valeurs utilisées dans cette requête? Quel est le résultat? Etc.


ok jetate d'essayer avec le débogage que j'ai ajouté une alerte dans le succès et l'erreur et à la fin de l'en-tête de page ('Type de contenu: Application / Json'); Erreur est: SyntaxError: JSON.PARSE: Caractère inattendu à la ligne 1 Colonne 1 des données JSON


@David J'ai ajouté la page PHP avec le code SQL que j'essaie de combiner avec la deuxième déclaration AJAX.


Vous êtes une pratique codante est horrible. Vous ne testez jamais si (Isset ($ _ obtenir ["yourgetprophere '])) {} . Vous n'utilisez pas non plus une déclaration préparée correctement. Vous n'avez jamais -> exécuter (); la déclaration. PHP.net/manual/fr/mysqli.prepare.php


L'une des raisons probables des votes en baisse n'est jamais élaborée sur "ne fonctionne pas". Soyez plus précis, ce qui ne se passe-t-il pas, qu'est-ce qui ne se passe-t-il pas, quelles erreurs obtenez-vous? Cela vous aiderait également à vous rendre votre code plus lisible sans des masses d'espace blanc et en utilisant une indentation cohérente


Je ne peux pas enfermer l'erreur, toujours la même: SyntaxError: JSON.PARSE: Personnage inattendu à la ligne 1 Colonne 1 des données JSON. J'ai déjà essayé les réponses, toujours la même erreur.


Ma nouvelle question à décomposer le problème et à encapsuler Stackoverflow.com/Questtions/56239790/...


@Daniel Vous avez juste besoin d'ajouter async: true après DataType: 'json' pour asynchrone Lire .


@Jaydeepmor c'est la même chose comme attendre


J'ai fait une édition avec d'autres infos.


5 Réponses :


1
votes

Quelques problèmes avec le code d'origine:

a. Premier AJAX code> doit terminer avant de démarrer deuxième ajax code> strong> p>

Votre deuxième AJAX code> Appel a besoin de la valeur de Datum code> qui est renvoyé par le premier AJAX code> appel. Actuellement, le second ajax code> commencera immédiatement après l'envoi du premier ajax code>, avant d'avoir renvoyé datum code>. Nous devons donc attendre le premier ajax code> pour renvoyer datum code> avant de pouvoir l'utiliser comme entrée pour le second ajax code>. P>.

Le moyen facile de le faire est avec la fonctionnalité async / attendre code> de ECMA2017 (docs ICI ). Cela permet à JavaScript de courir de manière asynchrone et d'attendre que quelque chose se termine avant de procéder. P>

Pour ce faire, nous devons d'abord déclarer la fonction joint en tant que async code> (voir // 1. Commentaires dans le code ci-dessous): p> xxx pré>

alors nous ajoutons attendre code> devant le premier $. (Ajax) code> appel (Voir // 3. Commentaires dans le code ci-dessous): p> xxx pré>

ensemble, le moteur JavaScript pause le code au premier Ajax code> appeler Renvoie la valeur datum code>. Ensuite, il continuera comme normal. P>

b. Datum code> doit être au niveau supérieur de la fonction enfermante forte> p>

comme écrit, la variable Datum code> n'existe que dans la fonction anonyme attribuée à "Succès" code> dans le premier AJAX code> appel. Il n'est donc pas disponible pour le second Ajax code> appel ("Datum n'est pas défini"). p>

Vous pouvez résoudre ce problème en déclarant datum code> comme global (en dehors du $. (prêt) {} code>), ou mieux, vous pouvez le garder dans votre $. (prêt) {} code> en la déclarant sur les crochets les plus externes (voir // 2. Commentaires dans le code ci-dessous). P>

Enfin, vous devez remplacer varatum = réponse ['datum']; code> avec datum = réponse ['Datum']; code>. (Voir // 4. Commentaire dans le code ci-dessous). P>

/* Funktionen um Startzeiten für Zyklen aus DB.TesterCycleCount zu erhalten bzw. für Test und Stunden, das aktuelle Datum gerundet auf 30 Minuten */ 

// 1. ADD 'ASYNC' IN FRONT OF FUNCTION

$(document).ready(async function(){

// 2. DECLARE 'DATUM' AT TOP

var Datum;
var TesterID = "<?php echo $_GET['TesterID']; ?>"; /* value der Tester erhalten */ 

        // 3. ADD AWAIT IN FRONT OF FIRST AJAX CALL

        await $.ajax({ /* AJAX aufrufen */
            url: 'ma_get-TesterID_Testende.php',
            type: 'GET', /* Methode zum übertragen der Daten */
            data: {TesterID:TesterID}, /* Daten zu übermitteln */
            dataType: 'json',
            success:function(response){ /* Die zurückgegebenene Daten erhalten */

                var CID = response['CID'];

                // 4. REMOVE VAR IN FRONT OF DATUM

                Datum = response['Datum'];

            },
             error: function(jqxhtt, status, exception) {
             console.log(exception);
         alert('Exception:', exception)

            }
        });




    var TestaufstellungID = "<?php echo $_GET['TestaufstellungID']; ?>";
    $.ajax({ /* AJAX aufrufen */
        url: 'ma_TestendeSQL.php',
        type: 'get', /* Methode zum übertragen der Daten */
        data: {Testaufstellung:TestaufstellungID, Datum: Datum}, /* Daten zu übermitteln */
        dataType: 'json',
        success:function(data){ /* Die zurückgegebenene Daten erhalten */


            alert('Successfully called Datum='.Datum);
        },
        error: function(jqxhr, status, exception) {
            alert('Exception:', exception)

        }
    });

});


16 commentaires

Je reçois toujours l'erreur sur ma ma: Testende.php Page SyntaxError: JSON.PARSE: Caractère inattendu à la ligne 1 Colonne 1 des données JSON


Cela ressemble à des données JSON que vous soumettez n'est pas valide JSON. Pouvez-vous mettre une console.log () quelque part pour imprimer des données JSON? Ensuite, vous pouvez comparer à JSONFORDER.Curiousconcept.com pour voir où l'erreur de formatage est et corrigez-la avant de l'envoyer.


Pouvez-vous m'aider où je peux placer la console.log (), semble ne pas fonctionner, lorsque je vous ai placé dans