首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果在单个HTML中选择了某个选项,则显示PHP数据

如果在单个HTML中选择了某个选项,则显示PHP数据
EN

Stack Overflow用户
提问于 2018-08-23 08:02:37
回答 1查看 56关注 0票数 0

我想要显示来自PHP的数据,如果其中一个对象被选中。这是我写的HTML代码,但它不能工作。我知道这是因为PHP会执行一次,所以之后就不会显示任何东西了。或者下面的PHP部分根本没有接收到software对象。我应该有一个能够显示的Javascript吗?这有必要吗?

代码语言: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文件解决这个问题的另一种方法是将所有选项和数据缓存到前端,如下所示:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-23 08:30:41

这段代码是未经测试的,但它应该可以实现您想要实现的目标。更改后的select将触发对包含代码的单独software.php文件的ajax调用,并将数据返回到#softwareResponse div。希望这对你有帮助,我也使用了短码回声来整理一下这种做事的方式。

index.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
<?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']

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51976686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档