Restituisce $ .get i dati in una funzione utilizzando jQuery

Sto cercando di chiamare una funzione che contiene il codice jQuery. Voglio che questa funzione restituisca i risultati dell’istruzione jQuery. Non funziona, e sto cercando di capire perché.

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

L’avviso mostra ” [object XMLHttpRequest] .” Tuttavia, se eseguo l’istruzione jQuery da sola, al di fuori di una funzione, funziona bene -> $.get(scriptURL, {}, function(data) { alert(data); })

Mi piacerebbe essere in grado di riutilizzare questo codice inserendolo all’interno di una funzione che restituisce i dati $.get . Che errore fondamentale sto facendo qui?

Hai alcuni errori diversi. Innanzitutto, $ .get non restituisce il valore restituito della funzione di callback. Restituisce l’object XHR. In secondo luogo, la funzione get non è sincrona, è asincrona quindi è probabile che showGetResult ritorni prima del completamento. In terzo luogo, non è ansible restituire qualcosa dall’interno del callback all’ambito esterno. È tuttavia ansible associare una variabile nell’ambito esterno e impostarla nella richiamata.

Per ottenere la funzionalità che desideri, dovrai utilizzare $ .ajax e impostare l’opzione asincrona su false. Quindi è ansible definire una variabile nell’ambito esterno e assegnarla nel callback ajax, restituendo questa variabile dalla funzione.

 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; } 

Probabilmente si sarà meglio serviti, cercando di capire come fare ciò che si desidera nella funzione di callback stessa piuttosto che passare da chiamate asincrone a chiamate sincrone.

L’errore fondamentale che stai facendo è che la chiamata AJAX è fatta in modo asincrono, quindi al momento della tua restituzione, il risultato non è ancora pronto. Per fare questo, potresti modificare il tuo codice in questo modo:

 $(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); }); } 

Sembra che tu voglia una richiesta sincrona: come posso ottenere jQuery per eseguire una richiesta Ajax sincrona, piuttosto che asincrona?

In alternativa, è ansible passare la richiamata alla funzione:

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

L’errore fondamentale è la parte “asincrona” di AJAX. Poiché non si sa quanto tempo impiegherà il server per inviare una risposta, i metodi AJAX non “bloccano” mai, cioè non si chiama il server e si rimane lì ad aspettare il risultato. Invece, si passa a qualcos’altro, ma si imposta un metodo, chiamato “callback”, che si triggers quando i risultati tornano. Questo metodo è responsabile di fare tutto ciò che è necessario fare con i dati (ad esempio, inserirli nella pagina).

Questo è il modo sbagliato di fare. La funzione (dati) è una funzione di richiamata, quindi ogni volta che viene restituito $ .get verrà eseguito .. esiste la possibilità che la funzione di richiamata non sia stata chiamata.

Meglio chiamare i tuoi dati post ottenere la funzione dal metodo di funzione (dati).