Devuelve $ .get datos en una función usando jQuery

Intento llamar a una función que contiene el código jQuery. Quiero que esta función devuelva los resultados de la statement jQuery. No está funcionando, y estoy tratando de descubrir por qué.

function showGetResult (name) { var scriptURL = "somefile.php?name=" + name; return $.get(scriptURL, {}, function(data) { return data; }); } alert (showGetResult("John")); 

La alerta muestra ” [object XMLHttpRequest] “. Sin embargo, si ejecuto la statement jQuery por sí mismo, fuera de una función, funciona bien -> $.get(scriptURL, {}, function(data) { alert(data); })

Me gustaría poder volver a utilizar este código poniéndolo dentro de una función que devuelve los datos $.get . ¿Qué error fundamental estoy haciendo aquí?

Tienes algunos errores diferentes. Primero, $ .get no devuelve el valor de retorno de la función de callback. Devuelve el objeto XHR. En segundo lugar, la función get no es síncrona, es asincrónica, por lo que showGetResult probablemente regrese antes de que se complete. En tercer lugar, no puede devolver algo desde dentro de la callback al ámbito externo. Sin embargo, puede vincular una variable en el ámbito externo y configurarla en la callback.

Para obtener la funcionalidad que desee, deberá usar $ .ajax y establecer la opción asincrónica en falso. Luego puede definir una variable en el ámbito externo y asignarla en la callback ajax, devolviendo esta variable desde la función.

 function showGetResult( name ) { var result = null; var scriptUrl = "somefile.php?name=" + name; $.ajax({ url: scriptUrl, type: 'get', dataType: 'html', async: false, success: function(data) { result = data; } }); return result; } 

Sin embargo, probablemente sería más útil averiguar cómo hacer lo que desea en la función de callback en lugar de cambiar de llamadas asincrónicas a llamadas síncronas.

El error fundamental que está cometiendo es que la llamada AJAX se realiza de forma asíncrona, por lo que cuando regrese, el resultado aún no está listo. Para hacer esto, puedes modificar tu código así:

 $(function() { showGetResult('John'); }); function showGetResult (name) { $.get('somefile.php', { // Pass the name parameter in the data hash so that it gets properly // url encoded instead of concatenating it to the url. name: name }, function(data) { alert(data); }); } 

Parece que quiere una solicitud sincrónica: ¿cómo puedo hacer que jQuery realice una solicitud Ajax sincrónica, en lugar de asincrónica?

O bien, es posible que desee pasar la callback a su función:

 function showGetResult (name, callback) { var scriptURL = "somefile.php?name=" + name; return $.get(scriptURL, {}, callback); } showGetResult("John", function(data){ alert(data); }); 

El error fundamental es la parte “asincrónica” de AJAX. Como no sabe cuánto tiempo demorará el servidor en enviar una respuesta, los métodos AJAX nunca se “bloquean”, es decir, no llama al servidor y se queda allí sentado esperando el resultado. En cambio, vas a otra cosa, pero configuras un método, llamado “callback”, que se activará cuando vuelvan los resultados. Este método es responsable de hacer lo que sea necesario hacer con los datos (por ejemplo, inyectándolo en la página).

Esta es la forma incorrecta de hacerlo. La función (datos) es una función de callback por lo que siempre que se ejecute return $ .get … existe la posibilidad de que no se haya llamado a la función de callback.

Mejor llame a su función de obtención de datos de publicación desde el método de función (datos).