Actualmente estoy estudiando JS y estoy bastante familiarizado con Vanilla JS, pero la sintaxis de JQuery me parece un poco extraña. Así que tengo el siguiente código en JS y funciona bien:
let xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { questions = JSON.parse(this.responseText); loadQuestionsData(); } }; xhttp.open("GET", "http://localhost:8080/questions", true); xhttp.send();Aquí creo un nuevo XMLHttpRequest para mi localhost y obtengo JSON de preguntas y cuando la respuesta está lista, se ejecuta la función loadQuestionsData() (inserta la lista de preguntas en la tabla). Intenté reescribir esto con JQuery, pero no funciona y no entiendo por qué. Aquí está mi enésimo intento de hacer esto:
$(document).on('readystatechange', function() { $.ajax({ url: "http://localhost:8080/questions", type: 'GET', success: function() { questions = JSON.parse(this.responseText); loadQuestionsData(); } }) })También he intentado lo siguiente, pero tampoco funciona:
$(document).on('readystatechange', function() { questions = JSON.parse($.ajax({ url: "http://localhost:8080/questions", type: 'GET', })).responseText; })Supongo que el problema es con la sintaxis? El código deja de ejecutarse en responseText .
El objeto del documento no tiene un evento onreadystatechange ; eso es parte del objeto XHR. Los métodos jQuery AJAX manejarán los cambios de estado por usted (parte de su simplicidad).
Además, el controlador de éxito tiene un parámetro que es el texto de respuesta, por lo que debe agregarlo a la firma de la función para poder acceder a él en la función.
Cámbialo a esto en su lugar...
$.ajax({ url: "http://localhost:8080/questions", type: 'GET', success: function(responseText) { questions = JSON.parse(responseText); loadQuestionsData(); } })No es necesario utilizar:
$(document).on('readystatechange', function() { }); como readystatechange es una propiedad de XmlHttpRequest();
simplemente cambie su código a:
$.ajax({ url: "http://localhost:8080/questions", type: 'GET', success: function() { questions = JSON.parse(this.responseText); loadQuestionsData(); } });