2009-07-28 9 views
73

codice JavaScript Sto iniziando con:

function doSomething(url) { 
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget 
    }); 
}  

modello vorrei usare:

//where elem is the target that should receive new items via DOM (appendChild) 
function doSomething(url, elem) { 
    $.ajax({ 
     type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget(elem) 
    }); 
} 

non credo che posso ottenere la richiamata a lavorare in questo modo, giusto? Qual è il modello corretto? Non voglio utilizzare variabili globali necessariamente per mantenere temporaneamente il nome elem o elem.

+0

http://stackoverflow.com/questions/2602981/jquery-how-to-pass-additional-parameters-to-success-callback-for-ajax-call use invokedata –

+0

Per riferimento futuro: è necessario memorizzare il funzione di callback ('rssToTarget') all'interno della proprietà' success' dell'oggetto letterale che si sta passando a '$ .ajax()', così jQuery può chiamare quella funzione una volta che la richiesta AJAX è stata completata. Aggiungendo '(elem)' alla fine del nome della funzione, si invoca erroneamente 'rssToTarget' e si memorizza il suo valore di ritorno in' success'. In JS, l'aggiunta di parentesi alla fine di un nome di funzione la invocherà. – BrunoFacca

risposta

94

... Ti piace questa

function doSomething(url, elem) { 
    $.ajax({ 
    type: "GET", 
    url: url, 
    dataType: "xml", 
    success: function(xml) { 
     rssToTarget(xml, elem); 
    } 
    }); 
} 

risposta al tuo commento: Does use of anonymous functions affect performance?

+3

aha +1. Paghi qualsiasi prezzo di prestazione per la creazione di funzioni anon ovunque? – BuddyJoe

+2

E immagino che sarebbe davvero .... successo: function (xml) {rssToTarget (xml, elem); } – BuddyJoe

+0

Se concordi puoi aggiornare la risposta? Grazie Josh – BuddyJoe

30

Il modello che si desidera utilizzare potrebbe funzionare se si crea un closure all'interno della vostra funzione rssToTarget:

function rssToTarget(element) { 
    return function (xmlData) { 
    // work with element and the data returned from the server 
    } 
} 

function doSomething(url, elem) { 
    $.ajax({ type: "GET", 
     url: url, 
     dataType: "xml", 
     success: rssToTarget(elem) 
     }); 
} 

Quando viene eseguito rssToTarget(elem), il parametro elemento viene memorizzato nello closure e la funzione di richiamata viene restituita ned, in attesa di essere giustiziato.

+0

-1 Non è possibile impostare il successo su una funzione che restituisce una funzione. –

+0

Ho dimenticato di aggiungere "ma richiede un parametro" –

+3

ovviamente è possibile restituire una funzione controllare il codice in esecuzione! http://jsbin.com/anepo/edit – CMS

Problemi correlati