Проблема, я думаю, была вызвана используемыми соглашениями об именах. В коде PHP в ajaxfile
выходной массив добавляет новый массив для каждого результата - ключ к нему называется MachineID
, но в функции обратного вызова ajax вы пытаетесь назначить machinery_id
и machinery
для вновь сгенерированного элементы option.
Я бы посоветовал упростить имена - сделать их четкими и легко определить, кем они могут быть. Я переписал вышеупомянутое как это - хотя конечно это не проверено:
Обычно я бы рекомендовал использовать prepared statements
, так как вышеприведенный код потенциально уязвим для внедрения SQL, но я не знаю, какова поддержка подготовленных операторов с SQL Server и PHP. Если они есть в наличии - используйте их!
<script>
$(document).ready(function(){
$("#machinery").change(function(){
$.ajax({
url:'ajaxfile.php',
type:'post',
data:{ machinery:$(this).val()},
dataType:'json',
success:function(response){
$("#sub_machinery").empty();
for( let n in response ){
let obj=response[n];
$("#sub_machinery").append( new Option( obj.id, obj.id ) );
}
}
});
});
});
</script>
ajaxfile.php
<?php
$server = 'server';
$options = array(
'UID' => 'user',
'PWD' => 'pass',
'Database' => 'database'
);
$conn2 = sqlsrv_connect($server, $options);
if ( $conn2 === false ) die("<pre>".print_r(sqlsrv_errors(), true));
$id = $_POST['machinery'];
$sql = "SELECT `MachineID` FROM `T013` WHERE `Machinery`='$id'";
$result = sqlsrv_query($conn2,$sql);
$output=array();
while( $row = sqlsrv_fetch_array( $result ) ){
$output[] = array( 'id' => $row['MachineID'] );
}
header('Content-Type: application/json');
exit( json_encode( $output ) );
?>