2013-05-07 3 views
6

È possibile passare variabili predefinite a funzioni richiamate su richiesta jQuery $ .get corretta?

Come nell'esempio seguente script PHP sarebbero tornati "bar":

var extra = "foo"; 
$.get(baar.php, function(data, extra){ 
    alert(extra + data); 
}); 

Così il mio obiettivo di essere una finestra di avviso proclamando "foobar" al mondo.

Grazie.

+0

Le funzioni JavaScript sono chiusure. Non c'è bisogno di fare altro che fare riferimento alla variabile. –

+0

... detto questo, un'altra opzione è prendere l'oggetto 'jqxhr' restituito da' $ .get() 'e aggiungervi delle proprietà. Tale oggetto sarà disponibile come terzo argomento del callback, oltre al valore 'this', che consente di recuperare la proprietà. Questo aiuta a rendere la tua funzione riutilizzabile. –

risposta

3

Non è necessario passarlo, extra sarà disponibile all'interno del callback a causa di come funziona lo scoping JavaScript. Quindi:

var extra = "foo"; 
$.get('baar.php', function(data){ 
    alert(extra + data); 
}); 
+0

Oh wow ... a volte penso sia troppo semplice .... Grazie però! – Matte

+0

posso modificare la variabile 'extra'? sopravviverà dopo la chiamata a 'get'? – Throoze

+0

@Throoze Sì, ma tenere presente che la chiamata get è asincrona. La riga subito dopo '$ .get' verrà eseguita prima che la richiesta di ricezione sia completata e, se si seleziona' extra', conterrà comunque il valore non modificato. – bfavaretto

1

Non credo sia possibile. ma è possibile utilizzare la funzione variabile esterna

var extra = "foo"; 
$.get(baar.php, function(data){ 
    alert(extra + data); 
}); 
1

all'interno So che questo post è vecchio (er), ma ho avuto questo stesso problema e ho pensato di postare la soluzione per il ragazzo successivo. Fondamentalmente, come dice bfalvretto sopra, le funzioni di jquery .get() e .post() sono asincrone, quindi quando ha ottenuto l'url remoto, il valore della variabile era diverso.
La mia soluzione era quella di lanciare la parte .get() nella sua funzione separata per limitare l'ambito del callback. Questo è ciò che mi si avvicinò con:

$("#SomethingClick").click(function(e) { 
    e.preventDefault(); 

    $.post("..getURL", { id: 123 }, function(data) { 
     for (i = 0; i < data.rows.length; i++) { 
     ExternalFunction(data.rows[i].Value1, data.rows[i].Value2); 
    } 
    }); 
}); 
... 
function ExternalFunction(value1, value2) { 
    $.get("/Core/ContactViewer/" + contactID, function (data2) { 
     $("someoutputdiv").html("<div>" + value1 + ": " + value2 + "</div>"); 
    }); 
} 

Spero che questo aiuti.

+0

Non ho idea del perché funzioni nel mio caso ma lo fa, quindi grazie! Ho avuto un ciclo 'for' con un valore dichiarato su ogni iterazione ma stava ancora usando il valore finale per tutti i callback' .get'. – Magicode