如何通过隐藏的输入元素将 PHP 字符串变量传递给 Javascript 函数
How to pass a PHP string variable through a hidden input element to a Javascript function
我正在为多语言语料库使用 solr solrium。关于以每种语言检索信息,一切都按预期进行。在下面的代码中,我有两个隐藏的输入元素,我在其中传递了两个 php 变量,然后我尝试将这些元素的值 post 传递给 javascript 函数,以便添加一个行到现有 table 并在其单元格中显示我的变量值。
我的 php 代码是这样的:
...
if ($highlightedDoc) {
foreach ($highlightedDoc as $field => $highlight) {
$hlight = implode(' (...) ', $highlight);
echo '<table id="lngData" text-align:left; border:none; cellpadding="02" cellspacing="02">';
echo '<tr><td><b>' . $counter . '</b></td><td>' . $subj_en. '</td><td>' . $hlight . '</td></tr>';
echo '<tr><td>' ."" . '</td><td>' . $subj_el . '</td><td>' .$con_el. '</td></tr>';
echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>';
echo '<tr><td><input id="s" name="s" type="hidden" value='. $con_fr . '/></td></tr>';
echo '<tr><td>' ."" . '</td><td><button onclick="showLng(q, s);">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr>';
echo '</table>';
}
这是我的 javascript 函数 showLng:
function showLng(x, y) {
var table = document.getElementById("lngData");
x = document.getElementById("q").value;
y = document.getElementById("s").value;
var row = table.insertRow(0);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "";
cell2.innerHTML = x;
cell3.innerHTML = y;
}
上面的 onclick 事件添加了 table 行,但它截断了结果语句。它仅输出每个句子的第一个单词。有人可以帮我吗?我读了很多关于如何将 php 字符串变量传递给 javascript 的 post,但没有用。
任何帮助将不胜感激。提前谢谢你。
你的主要问题是如何 "pass" PHP 数据到 Javascript...我记得一开始这让我很困惑所以让我一步一步解释:
假设你用 PHP 输出 Javascript 像这样:
echo '<script> console.log("Hello"); </script>';
这将输出作为脚本标记的字符串,在其中我们调用 console.log
函数,将字符串 "Hello" 作为参数传递。这一切都只是一个字符串。
现在让我们将 "Hello" 字符串放入 PHP 中的一个变量中:
$log = 'Hello';
echo '<script> console.log("' . $log . '"); </script>';
现在我们 "passed" PHP 数据到 Javascript。和上面一样的字符串。
另一个例子:
echo '<script>';
echo 'var hello = "";';
echo 'var world = "World";';
echo 'console.log(hello + " " + world);';
echo '<script>';
我们想用 PHP 填充 hello
变量。所以我们只添加它:
$helloString = 'Hello';
echo '<script>';
echo 'var hello = "' . echo $helloString . '";';
echo 'var world = "World";';
echo 'console.log(hello + " " + world);';
echo '<script>';
请注意 PHP 输出在 Javascript 中被 "
包围,因为即使我们输出带有 PHP 的字符串,如果我们省略 "
像这样:
echo 'var hello = ' . echo $helloString . ';';
PHP 也不会添加它们,因此浏览器中的输出将如下所示:
var hello = Hello;
无效,必须是:
var hello = "Hello";
你在代码中犯了这个错误,在 HTML:
echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>';
所以你的输出将是(假设 $subj_fr
是一个字符串 "Hello World"
):
<input ... value=Hello World />
这是不正确的。
我注意到您正在创建许多具有相同 ID (lngData
) 的 table,并且您的隐藏输入也都具有相同的 ID。我怀疑这是故意的吗?
在下面的代码中,为每个 table 创建了一个唯一的 ID。我还删除了隐藏元素,取而代之的是,将值与 table 的 ID 一起直接传递给 showLng
函数。我还改变了你用 PHP 构建 HTML 的方式,我这样做只是为了向你展示一种不同的方式(我会说它看起来更干净)来输出 HTML 和 PHP,而不是使用 echo
.
我不知道修复重复的 ID 是否能解决您的问题,但请尝试一下。
if ($highlightedDoc) {
$i = 0;
foreach ($highlightedDoc as $field => $highlight) {
$hlight = implode(' (...) ', $highlight);
$tableId = 'lngData' . $i;
?>
<table id="<?= $tableId ?>" style="text-align:left; border:none;" cellpadding="02" cellspacing="02">
<tr><td><b><?= $counter ?></b></td><td><?= $subj_en ?></td><td><?= $hlight ?></td></tr>
<tr><td><?= "" ?></td><td><?= $subj_el ?></td><td><?= $con_el ?></td></tr>
<tr><td><!-- removed unneeded hidden input --></td></tr>
<tr><td><!-- removed unneeded hidden input --></td></tr>
<tr><td><?= "" ?></td><td><button onclick="showLng('<?= $tableId ?>', '<?= $subj_fr ?>', '<?= $con_fr ?>');">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr>
</table>
<?php
$i++;
}
}
showLng
函数:
function showLng(tableId, x, y) {
var table = document.getElementById(tableId);
var row = table.insertRow(0);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "";
cell2.innerHTML = x;
cell3.innerHTML = y;
}
我正在为多语言语料库使用 solr solrium。关于以每种语言检索信息,一切都按预期进行。在下面的代码中,我有两个隐藏的输入元素,我在其中传递了两个 php 变量,然后我尝试将这些元素的值 post 传递给 javascript 函数,以便添加一个行到现有 table 并在其单元格中显示我的变量值。
我的 php 代码是这样的: ...
if ($highlightedDoc) {
foreach ($highlightedDoc as $field => $highlight) {
$hlight = implode(' (...) ', $highlight);
echo '<table id="lngData" text-align:left; border:none; cellpadding="02" cellspacing="02">';
echo '<tr><td><b>' . $counter . '</b></td><td>' . $subj_en. '</td><td>' . $hlight . '</td></tr>';
echo '<tr><td>' ."" . '</td><td>' . $subj_el . '</td><td>' .$con_el. '</td></tr>';
echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>';
echo '<tr><td><input id="s" name="s" type="hidden" value='. $con_fr . '/></td></tr>';
echo '<tr><td>' ."" . '</td><td><button onclick="showLng(q, s);">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr>';
echo '</table>';
}
这是我的 javascript 函数 showLng:
function showLng(x, y) {
var table = document.getElementById("lngData");
x = document.getElementById("q").value;
y = document.getElementById("s").value;
var row = table.insertRow(0);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "";
cell2.innerHTML = x;
cell3.innerHTML = y;
}
上面的 onclick 事件添加了 table 行,但它截断了结果语句。它仅输出每个句子的第一个单词。有人可以帮我吗?我读了很多关于如何将 php 字符串变量传递给 javascript 的 post,但没有用。 任何帮助将不胜感激。提前谢谢你。
你的主要问题是如何 "pass" PHP 数据到 Javascript...我记得一开始这让我很困惑所以让我一步一步解释:
假设你用 PHP 输出 Javascript 像这样:
echo '<script> console.log("Hello"); </script>';
这将输出作为脚本标记的字符串,在其中我们调用 console.log
函数,将字符串 "Hello" 作为参数传递。这一切都只是一个字符串。
现在让我们将 "Hello" 字符串放入 PHP 中的一个变量中:
$log = 'Hello';
echo '<script> console.log("' . $log . '"); </script>';
现在我们 "passed" PHP 数据到 Javascript。和上面一样的字符串。
另一个例子:
echo '<script>';
echo 'var hello = "";';
echo 'var world = "World";';
echo 'console.log(hello + " " + world);';
echo '<script>';
我们想用 PHP 填充 hello
变量。所以我们只添加它:
$helloString = 'Hello';
echo '<script>';
echo 'var hello = "' . echo $helloString . '";';
echo 'var world = "World";';
echo 'console.log(hello + " " + world);';
echo '<script>';
请注意 PHP 输出在 Javascript 中被 "
包围,因为即使我们输出带有 PHP 的字符串,如果我们省略 "
像这样:
echo 'var hello = ' . echo $helloString . ';';
PHP 也不会添加它们,因此浏览器中的输出将如下所示:
var hello = Hello;
无效,必须是:
var hello = "Hello";
你在代码中犯了这个错误,在 HTML:
echo '<tr><td><input id="q" name="q" type="hidden" value=' . $subj_fr . '/></td></tr>';
所以你的输出将是(假设 $subj_fr
是一个字符串 "Hello World"
):
<input ... value=Hello World />
这是不正确的。
我注意到您正在创建许多具有相同 ID (lngData
) 的 table,并且您的隐藏输入也都具有相同的 ID。我怀疑这是故意的吗?
在下面的代码中,为每个 table 创建了一个唯一的 ID。我还删除了隐藏元素,取而代之的是,将值与 table 的 ID 一起直接传递给 showLng
函数。我还改变了你用 PHP 构建 HTML 的方式,我这样做只是为了向你展示一种不同的方式(我会说它看起来更干净)来输出 HTML 和 PHP,而不是使用 echo
.
我不知道修复重复的 ID 是否能解决您的问题,但请尝试一下。
if ($highlightedDoc) {
$i = 0;
foreach ($highlightedDoc as $field => $highlight) {
$hlight = implode(' (...) ', $highlight);
$tableId = 'lngData' . $i;
?>
<table id="<?= $tableId ?>" style="text-align:left; border:none;" cellpadding="02" cellspacing="02">
<tr><td><b><?= $counter ?></b></td><td><?= $subj_en ?></td><td><?= $hlight ?></td></tr>
<tr><td><?= "" ?></td><td><?= $subj_el ?></td><td><?= $con_el ?></td></tr>
<tr><td><!-- removed unneeded hidden input --></td></tr>
<tr><td><!-- removed unneeded hidden input --></td></tr>
<tr><td><?= "" ?></td><td><button onclick="showLng('<?= $tableId ?>', '<?= $subj_fr ?>', '<?= $con_fr ?>');">Create row</button></td><td><button onclick="myDeleteFunction()">Delete row</button></td></tr>
</table>
<?php
$i++;
}
}
showLng
函数:
function showLng(tableId, x, y) {
var table = document.getElementById(tableId);
var row = table.insertRow(0);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
cell1.innerHTML = "";
cell2.innerHTML = x;
cell3.innerHTML = y;
}