Bonjour,

Je n'arrive pas correctement à récupérer une variable dans un JavaScript issue d'une boucle for en php:
la première itération fonctionne bien mais à partir de la deuxième j'ai un undefined.

Avez vous une idée pour résoudre ce problème ?



merci beaucoup

Dans ce code j'ai du mettre un div :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
<div id="language_name_<?php echo $i; ?>" data-language-name="<?php echo $language_name; ?>"></div>
car dans l'input cela ne fonctionnait pas pour récupérer la valeur
product.php
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 <?php
              for ($i = 0, $n = \count($languages); $i < $n; $i++) {
                $language_name = $languages[$i]['name'];
            ?>
                    <div id="language_name_<?php echo $i; ?>" data-language-name="<?php echo $language_name; ?>"></div>
 
                    <div class="separator"></div>
                    <div class="row" id="seoDefaultLanguageTitle<?php echo $i; ?>">
                      <div class="col-md-10">
                        <div class="form-group row" data-index="<?php echo $i; ?>">
                          <label for="<?php echo $SEO->getDef('text_seo_default_language_title'); ?>" class="col-5 col-form-label"><?php echo $SEO->getDef('text_seo_default_language_title'); ?></label>
                          <div class="col-md-7 input-group" id="seo_default_title_tag<?php echo $i; ?>">
                            <?php echo '&nbsp;' . HTML::inputField('seo_defaut_language_title_[' . $languages[$i]['id'] . ']', ($seo_defaut_language_title[$languages[$i]['id']] ?? SeoAdmin::getSeoDefaultLanguageTitle($seo->seo_id, $languages[$i]['id'])), 'maxlength="70" size="77" id="seo_default_title_tag_' . $i . '"', false); ?>
 
                          </div>
                        </div>
                      </div>
                    </div>
               <?php
                }
                ?>

Voici mon script.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
<!-- product seo  meta title -->
      $content = '<button type="button" class="btn btn-primary btn-sm submit-button" data-index="0">';
      $content .= '<i class="bi-chat-square-dots" title="' . $this->app->getDef('text_seo_page_title') . '"></i>';
      $content .= '</button>';
 
 
$output = <<<EOD
<!------------------>
<!-- ChatGpt start tag-->
<!------------------>
 
<!-- product seo  meta title h1 -->
 
<!-- product seo  meta title -->
<script defer>
$('[id^="seo_default_title_tag"]').each(function(index) {
  let button = '{$content}';
  let newButton = $(button).attr('data-index', index);
  let inputId = $(this).attr('id'); // Récupérer l'id de l'input pour l'itération actuelle
  let regex = /(\d+)/g; // Expression régulière pour extraire l'id
  let idSeoDefaultLanguageTitle = regex.exec(inputId)[0]; // Extraire l'id de l'input
 
 
 
  let language = $('#language_name_' + index).data('language-name'); // langue
 
 
 
 
 
  let questionResponse = '{$question_title}' + ' ' + '{$store_name}' + ' ' + language;
 
  newButton.click(function() { // Ajouter un listener pour chaque bouton
    let engine = $("#engine").val();
    let message = questionResponse; // Valeur envoyée à Open AI
 
    $.ajax({
      url: "{$url}",
      type: "POST",
      data: {message: message, engine: engine},
      success: function(data) {
        $("#chatGpt-output-input").val(data);
        $("#seo_default_title_tag_" + idSeoDefaultLanguageTitle).val(data); // Remplir automatiquement l'input avec la réponse de OPEN AI pour l'itération actuelle
      },
      error: function(xhr, status, error) {
        console.log(xhr.responseText);
      }
    });
  });
 
  $(this).append(newButton);
});
</script>EOD;
      return $output;

Résultat de la boucle for qui apparit dans la console

interation 1 : j'ai bien la langue Anglaise pour language
Interation 2 : pour language j'ai undefined