Home > Enterprise >  Ajax success function not working with json answer
Ajax success function not working with json answer

Time:07-08

If I set dataType to 'json' and inside my PHP file I print whatever I want (event a letter), success function works, but if I don't print anything else besides the JSON I need, stops working. I can't handle my data with something else printed, because it turns the answer into HTML, instead of JSON. I'm able to see in Network -> Answer the JSON file (only when I don't print anything else beside the JSON), but I don't know why I can't even do an alert in success function when that is the case.

This is my ajax, which only works because I'm printing 'true' on the server:

$(document).on("click", "#btnEditarInstructor", function(event) {
  event.preventDefault();
  let rfc = $(this).attr("value");
  $.ajax({
    type: "POST",
    url: "../utils/ajax/ajax_consulta_instructor.php",
    data: {
      rfc: rfc,
    },
    dataType: "json",
    succes: function(response) {
      if (response == true) {
        // alert(response);
      }
    },
    error: function(request, status, error) {
      var val = request.responseText;
      alert("error"   val);
      alert(status);
      alert(error);
    },
  });
})

This is my PHP code:

$rfc = $_POST['rfc'];
$sql = "SELECT * FROM instructores WHERE rfc = '$rfc'";
$sql_run = mysqli_query($con, $sql);
while ($row = mysqli_fetch_array($sql_run)) {
  echo "true";

  $datos['status'] = 'OK';
  $datos['nombre'] = $row['nombre'];
  $datos['apellidos'] = $row['apellidos'];
  $datos['email'] = $row['email'];
  $datos['tipo_promotor'] = $row['tipo_promotor'];
  echo json_encode($datos);

}

By the way, with that code, I get this error on the alert:

SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 5 of the JSON data

I'm using jQuery 3.6.0 (https://code.jquery.com/jquery-3.6.0.js)

CodePudding user response:

If you're returning JSON, you can only echo the JSON once, not each time through the loop. Put the data in an array and convert the array to JSON at the end.

You also can't echo anything else, so the echo "true"; lines are breaking it.

And your code is wide open to SQL-injection. You should use a prepared statement with a parameter, which I've shown how to do.

$rfc = $_POST['rfc'];
$stmt = $con->prepare("SELECT * FROM instructores WHERE rfc = ?");
$stmt->bind_param("s", $rfc);
$stmt->execute();
$sql_run = $stmt->get_result();
$result = [];
while($row = mysqli_fetch_array($sql_run)){
    $datos = [];
    $datos['status'] = 'OK';
    $datos['nombre'] = $row['nombre'];
    $datos['apellidos'] = $row['apellidos'];
    $datos['email'] = $row['email'];
    $datos['tipo_promotor'] = $row['tipo_promotor'];
    $result[] = $datos;
}
echo json_encode($result);

CodePudding user response:

$(document).on("click", "#btnEditarInstructor", function (event) {
event.preventDefault();
let rfc = $(this).attr("value");
$.ajax({
type: "POST",
url: "../utils/ajax/ajax_consulta_instructor.php",
data: {
  rfc: rfc,
},
dataType: "json",
success: function (response) {
  if (response == true) {
    // alert(response);
  }
},
error: function (request, status, error) {
  var val = request.responseText;
  alert("error"   val);
  alert(status);
  alert(error);
},
});
  • Related