我已经阅读了多种答案但没有效果。 我尝试做的是让PHP foreach循环中的每个结果都可以点击,然后将这些数据与AJAX一起发送到另一个PHP文件,现在的问题是无论我做什么,只有最后的foreach结果总是得到发送而不是结果我点击了吗? (没有数据库)
循环存在于函数functions.php中:
public function getForeachResult ()
{
$response = $this->GetObject($parameters);
include 'template.php';
}
处理结果template.php的模板:
<?php
foreach ($response->Result->List as $key =>$value) {
?><table id="mytable"><tr>
<th>ID</th>
<th>Date</th>
<th>firstname</th>
<th>lastname</th>
</tr>
<?php foreach ($value as $key=>$value) {?>
<tr class="myrow">
<td><?php echo $value->ID; ?></td>
<td><?php echo date("d-m-Y", strtotime($value->Time)); ?></td>
<td><?php echo $value->FullName; ?></td>
<td><?php echo $value->LastName; ?></td>
</tr>
<?php } ?>
</table><br />
<?php } ?>
在template.php中,AJAX脚本在底部调用:
<script>
$('.myrow').click(function() {
$.ajax({
type: "POST",
cache: false,
url: "post.php",
data: { action: 'goTo', value: <?php echo $value->ID ?>}
}).done(function( msg ) {
$('.Data').html(msg);
});
});
在发送数据的post.php中,我只得到foreach循环的最后一个结果 post.php中:
if($_POST['action'] == 'goTo') {
var_dump ($_POST);
}
那么如何确保AJAX发送我点击的数据?
答案 0 :(得分:0)
尝试:
`<td class="id"><?php echo $value->ID; ?></td>
<script>
$('.myrow').click(function() {
var id = $(this).find('.id').text();
$.ajax({
type: "POST",
cache: false,
url: "post.php",
data: { action: 'goTo', value: $(this).find(td:first).text().trim()}
}).done(function( msg ) {
$('.Data').html(msg);
});
});`
我认为你在数据字段中的php表达式只保留了最后一个id,因为你在你的html中循环但在你的ajaxcall中你已经在循环的最后。
编辑:发表评论
答案 1 :(得分:0)
您需要使用遍历来动态查找每个行值,如此
var clicked_row_id = $(this).find('td:first').text().trim();
数据应该像这样发送
data: { action: 'goTo', value: clicked_row_id }
更新1:
$('.myrow').click(function() {
var clicked_row_id = $(this).find('td:first').text().trim();
$.ajax({
type: "POST",
cache: false,
url: "post.php",
data: { action: 'goTo', value:clicked_row_id }
}).done(function( msg ) {
$('.Data').html(msg);
});
});
在foreach循环结束时,您只能在
$value->ID;
中获得最后一次迭代值。所以当你在js中回应它。所以它只会回显最后一个值。
答案 2 :(得分:0)
所以,为了解释原因,我认为你搞砸了脑子里的一些东西,这会引起混乱。你的PHP文件确实没有在Ajax中发送任何PHP文件。您的PHP文件构建了一个HTML页面,此页面中的Javascript在Ajax中发送数据。
请记住,在PHP中,您构建了一个稍后执行的未来JS代码。如果在Ajax调用期间必须重新获取动态变量或者要发送数据,那将是JS,而不是PHP。
所以像其他人的答案建议一样,你必须在JS中检索id,而不是PHP。
答案 3 :(得分:0)
只有您需要做的就是获得点击后的ID
$('.myrow').click(function() {
var id = $(this).children("td.first").text();
$.ajax({
type: "POST",
cache: false,
url: "post.php",
data: { action: 'goTo', value: id}
}).done(function( msg ) {
$('.Data').html(msg);
});
它可以正常工作,无需更改表格html