You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中调用PHP函数获取对应语言ID的语言名称?

问题原因

PHP是服务器端先运行,生成页面后才发送给浏览器;JS是浏览器端后运行。你原来的写法试图把JS变量language_id传给PHP函数,但PHP运行时这个JS变量根本还不存在,所以肯定拿不到正确的语言名称。

解决方案(两种可选)

方案一:提前把所有语言数据传给JS

在script.php里先把所有语言的ID和名称转成JS可直接用的对象,之后JS直接从这个对象里取值:

  1. 在script.php开头,先获取所有语言的ID-名称映射并转成JSON:
$Language = Registry::get('Language');
// 假设$languages是product.php中遍历的语言数组,确保script.php能访问到这个变量
$languageMap = [];
foreach ($languages as $lang) {
    $languageMap[$lang['id']] = $Language->getLanguagesName($lang['id']);
}
// 转成JSON字符串,供JS使用
$languageJson = json_encode($languageMap);
  1. 修改EOD里的JS代码,引入这个映射并取值:
<script defer>
// 把PHP生成的JSON转成JS对象
const languageMap = <?php echo $languageJson; ?>;

$('[id^="seo_default_title_h"]').each(function(index) {
  let button = '{$content}';
  let newButton = $(button).attr('data-index', index);
  let inputId = $(this).attr('id'); 
  let regex = /(\d+)/g; 
  let idSeoDefaultTitleH = regex.exec(inputId)[0];
 
  let language_id = parseInt(idSeoDefaultTitleH);
  // 直接从映射里取对应语言名称
  let language_name = languageMap[language_id];

  let questionResponse = '{$question_title}' + ' ' + '{$store_name}' + ' : traduction ' +  language_name 
  
  newButton.click(function() {
    let message = questionResponse;

    $.post("{$url}", {message: message}, function(data) {
      $("#output-input").val(data);
      $("#seo_default_title_h_" + idSeoDefaultTitleH).val(data); 
    });
  });

  $(this).append(newButton); 
});
</script>

方案二:在HTML元素里嵌入语言名称(更简单)

直接在product.php的循环里,给对应的输入框容器加上data-language-name属性,JS直接读取这个属性值:

  1. 修改product.php里的代码,给div添加数据属性:
<div class="col-md-7 input-group" id="seo_default_title_h<?php echo $languages[$i]['id']; ?>" data-language-name="<?php echo $Language->getLanguagesName($languages[$i]['id']); ?>">
  <?php echo '&nbsp;' . HTML::inputField('seo_defaut_language_title_h1_[' . $languages[$i]['id'] . ']', ($seo_defaut_language_title[$languages[$i]['id']] ?? SeoAdmin::getSeoTitleH1($seo->seo_id, $languages[$i]['id'])), 'maxlength="70" size="77" id="seo_default_title_h_' . $languages[$i]['id'] . '"', false); ?>
</div>
  1. 修改script.php里的JS代码,直接读取数据属性:
let language_name = $(this).data('language-name');

替换原来那句出错的let language_name = '{$Language->getLanguagesName(' + language_id + ')}';即可,其他代码不用改。

内容的提问来源于stack exchange,提问作者Juliana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:23:25