0

之前已经回答了这个问题,但是我再次询问有两个原因:我找不到任何使用 PDO 的资源,不管怎样,我找到的所有资源都包含没有任何注释或解释的代码,这很难解释它们并使其适应我的用例。

我需要能够根据前一个选项的选择动态更新下拉列表,如果我更改该选择,它应该重新更新自身,而无需提交表单或重新加载页面。

我已经用迄今为止所学和发现的内容更新了代码,但它仍然无法正常工作。一切正常,直到第二个下拉菜单开始加载值。

HTML:

<div class="form-group row">
    <label class="col-sm-2 form-control-label" onchange="productorInfo(this.value);">Codigo Productor (*)</label>
    <div class="col-sm-4">
        <select name="vendedor_codigo">
            <?php foreach ($dd_productor_result as $dd_productor_display) : ?>
            <option value="<?= $dd_productor_display['vendedor_codigo']; ?>">
                <?= $dd_productor_display['vendedor_codigo']; ?>
            </option>
            <?php endforeach; ?>
        </select>
    </div>
    <label class="col-sm-2 form-control-label">Nombre (*)</label>
    <div class="col-sm-4">
        <select id="ajax-vendedor" name="vendedor_nombre">
            <?php foreach ($ajax_productor_result as $dd_productor_display) : ?>
            <option placeholder="Seleccione codigo" value="<?= $dd_productor_display['vendedor_nombre']; ?>">
                <?= $dd_productor_display['vendedor_nombre']; ?>
            </option>
            <?php endforeach; ?>
        </select>
    </div>
</div>

阿贾克斯脚本:

function productorInfo(id) {
    $.ajax({
        type: "GET",
        url: "/controller/produccion/db_ajax_update.php",
        data: "mainid =" + id,
        success: function (result) {
            $("#ajax-vendedor").html(result);
        }
    });
};

第一个下拉PHP代码:

$dd_productor = "SELECT vendedor_codigo FROM lista_productores";

$productor_stmt = $pdo->prepare($dd_productor);
$productor_stmt->execute();
$dd_productor_result = $productor_stmt->fetchAll();

第二个下拉列表(ajax 调用):

if(isset($_GET['mainid'])){
productorInfo($_GET['mainid']);
$prod_value = productorInfo($_GET['mainid']);
}
$ajax_productor = "SELECT vendedor_nombre FROM lista_productores WHERE vendedor_codigo = {$prod_value}";

$productor_stmt = $pdo->prepare($ajax_productor);
$productor_stmt->execute();
$ajax_productor_result = $productor_stmt->fetchAll();
4

1 回答 1

1

onchange 调用应该在选择元素上而不是在标签上

<label class="col-sm-2 form-control-label">Codigo Productor (*)</label>
<select name="vendedor_codigo onchange="productorInfo(this.value)">

但我也觉得你可能不太了解这个过程。页面加载时不会触发您的 ajax 调用,所以这一点:

<select id="ajax-vendedor" name="vendedor_nombre">
            <?php foreach ($ajax_productor_result as $dd_productor_display) : ?>
            <option placeholder="Seleccione codigo" value="<?= $dd_productor_display['vendedor_nombre']; ?>">
                <?= $dd_productor_display['vendedor_nombre']; ?>
            </option>

我认为会给你未定义的变量警告(除非你$ajax_productor_result最初以某种方式设置)

来自 ajax 的响应通常通过成功绘制在 .js 中:函数

(result) {
            $("#ajax-vendedor").html(result);
        }

不过从这个外观来看 - 除非有更多已发布的代码,否则您将 .html() 函数传递给数组或数据库行,因此它永远不会显示任何内容。

所以你需要1)在页面加载时绘制一个没有选项的选择(或默认选项,如果你有它们)2)返回一个成功函数可以使用的响应,例如一个json字符串,jquery可以解析3)格式化将 jquery 中的数据放入<options>,然后使用该.html()函数更新选择 4)如果您希望在页面最初加载时发生这种情况,然后添加对productorInfo(id)函数的文档就绪调用 - 如果您正在设置初始选择值,这将是相关的以某种方式(所以它可能与你无关)

于 2019-04-13T07:30:47.667 回答