Estoy usando esta función ajax para obtener opciones para dos menús desplegables a través de ajax pero no devuelve ningún resultado. Hola, esta es mi función ajax:
<script> $('#department').on('change',function(){ var department = $(this).val(); var course = $('#course').val(); if(department){ $.ajax({ type:'POST', url:'ajaxData.php', dataType: 'json', cache: false, data:{department: department, course: course }, success: function(data){ $('#head_name').html(data.head_name); $('#email').html(data.email); } }); }else{ $('#head_name').html('<option value="">Select Department first</option>'); $('#email').html('<option value="">Select Department first</option>'); } }); </script>Y este es mi código de consulta:
if(isset($_POST["department"]) && isset($_POST["course"])){ //Get all courses data $query = $db->query("SELECT head_name, email FROM head WHERE course = '".$_POST['course']."' AND department = '".$_POST['department']."' "); //Count total number of rows $rowCount = $query->num_rows; //Display result list if($rowCount > 0){ while($row = $query->fetch_assoc()){ $temp = array('head_name' => '<option value="'.$row['head_name'].'">'.$row['head_name'].'</option>', 'email' => '<option value="'.$row['email'].'">'.$row['email'].'</option>' ); echo json_encode($temp); } }else{ $temp = array('head_name' => '<option value="">Not avaialble </option>', 'email' => '<option value="">Not avaialble </option>' ); echo json_encode($temp); } }Pero no obtengo resultados de salida, ¿qué estoy haciendo mal?
Su llamada Ajax espera JSON ( dataType: 'json' ) pero no devuelve JSON a través de su salida de PHP porque el tipo de contenido predeterminado es text/html y no application/json . Agregue el encabezado Content-Type adecuado antes de echo su salida JSON.
header('Content-Type: application/json'); echo json_encode(array('something' => 'else'));hace eco de una matriz, por lo que debe acceder al elemento de datos como una matriz por índice.
por ejemplo, para el primer elemento
success: function(data){ $('#head_name').html(data[0].head_name); $('#email').html(data[0].email); }eventualmente intente jsonParse datos
success: function(data){ jsonData = JSON.parse(data); $('#head_name').jsonData(data[0].head_name); $('#email').jsonData(data[0].email); }en su tiempo, debe usar una matriz para almacenar los valores
while($row = $query->fetch_assoc()){ $temp[] = array('head_name' => '<option value="'.$row['head_name'].'">'.$row['head_name'].'</option>', 'email' => '<option value="'.$row['email'].'">'.$row['email'].'</option>' ); echo json_encode($temp); }Acabo de cambiar el nombre de la variable, por supuesto, y mi función comienza a funcionar, no sé por qué así:
data:{ department: department, courseid: course},