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 :
<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
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 ' ' . 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
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
Partager