这已经得到了回答,但是由于两个原因我再次询问:我找不到利用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>
Ajax脚本:
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();
答案 0 :(得分:1)
onchange调用应该在select元素上而不是标签上
<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函数成功通过.js绘制的:函数
(result) {
$("#ajax-vendedor").html(result);
}
尽管如此-除非已经发布了更多代码,否则您将.html()函数传递给数组或数据库行,因此它永远不会显示任何内容。
所以你需要
1)在页面加载中绘制一个没有选项的选择(如果有选择,则选择默认选项)
2)返回成功功能可以使用的响应,例如jQuery可以解析的json字符串
3)将jquery中的数据格式化为<options>
,然后使用.html()
函数更新选择
4)如果您希望在页面最初加载时发生这种情况,然后添加一个productorInfo(id)
函数的文档就绪调用-如果您以某种方式设置初始选择值,那么这将是有意义的(因此可能不会与您相关)