我想要显示来自PHP的数据,如果其中一个对象被选中。这是我写的HTML代码,但它不能工作。我知道这是因为PHP会执行一次,所以之后就不会显示任何东西了。或者下面的PHP部分根本没有接收到software
对象。我应该有一个能够显示的Javascript吗?这有必要吗?
<select name="software" onchange="showSoftware(this.value)">
<?php foreach ($softwareCollection as $software): ?>
<option value="<?php echo $software ?>">
<?php echo $software->date?>
</option>
<?php endforeach; ?>
</select>
<script>
function showSoftware(software) {
jQuery.ajax({
type: "POST",
data: {software: software},
success: function(data) {
console.log(data);
}
});
}
</script>
<?php if (isset($_POST['software'])): ?>
<?php foreach ($software->links as $link): ?>
<tr>
<td>
<?php echo $link->title; ?>
</td>
<td>
<?php echo $link->url; ?>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
用单个html文件解决这个问题的另一种方法是将所有选项和数据缓存到前端,如下所示:
<script>
require(['jquery'], function($) {
jQuery(document).ready(function($) {
/*
* Cache the softwareCollection
*/
var softwareCollection = [];
<?php foreach ($softwareCollection = $this->getSoftware() as $software): ?>
var links = [];
var softwareId = '<?php echo $software->id ?>';
var softwareDate = '<?php echo $software->date->date?>';
<?php foreach ($software->links as $link): ?>
links.push({
title: '<?php echo $link->title ?>', description: '<?php echo $link->description?>',
url: '<?php echo $link->url ?>'
});
<?php endforeach; ?>
softwareCollection.push({id: softwareId, date: softwareDate, links: links});
<?php endforeach; ?>
softwareCollection.sort((a, b) => (a.date < b.date));
const $this = $('select[name=software]');
for (var i = 0; i < softwareCollection.length; i++) {
$this.append(
'<option value=\"' + softwareCollection[i].id + '\">' + softwareCollection[i].date + '</option>'
);
}
}
}
</script>
发布于 2018-08-23 08:30:41
这段代码是未经测试的,但它应该可以实现您想要实现的目标。更改后的select将触发对包含代码的单独software.php文件的ajax调用,并将数据返回到#softwareResponse
div。希望这对你有帮助,我也使用了短码回声来整理一下这种做事的方式。
index.html
<select id="softwareSelect" name="software">
<?php foreach($softwareCollection as $software): ?>
<option value="<?=$software;?>"><?=$software->date;?></option>
<?php endforeach; ?>
</select>
<div id="softwareResponse"></div>
<script>
jQuery(document).ready(function($) {
$( '#softwareSelect' ).change(function () {
$.ajax({
url: 'software.php'
type: 'POST',
data: {software: $(this).val()},
success: function(data) {
$('#softwareResponse').html(data);
}
});
});
});
</script>
software.php
<?php if(isset($_POST['software'])): ?>
<table>
<?php foreach ($software->links as $link): ?>
<tr>
<td><?=$link->title); ?></td><td><?=$link->url); ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>No software selected.</p>
<?php endif; ?>
注意:这确实假设$software->links对象和$softwareCollection对象都可以工作。如果这些是数组,则改用关联查找,例如$software['date']
https://stackoverflow.com/questions/51976686
复制相似问题