2013-05-07 15 views
6

Czy jest możliwe przekazywanie predefiniowanych zmiennych do funkcji wywoływanych po pomyślnym żądaniu jQuery $ .get?

jak w poniższym przykładzie skryptu PHP wróci „bar”:

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

Dlatego moim celem jest powiadomienie pole głosząc „foobar” na świat.

Dzięki.

+0

Funkcje JavaScript to zamknięcia. Nie trzeba robić nic więcej, niż tylko odwoływać się do zmiennej. –

+0

... powiedział, inną opcją jest wzięcie obiektu 'jqxhr' zwrócony z' $ .get() 'i dodanie do niego właściwości. Ten obiekt będzie dostępny jako trzeci argument wywołania zwrotnego, a także wartość 'this', która umożliwi pobranie właściwości. Pomaga to w ponownym użyciu funkcji. –

Odpowiedz

3

Nie musisz go przekazywać, extra będzie dostępny wewnątrz wywołania zwrotnego z powodu działania skryptu JavaScript. A więc:

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

Oh wow ... czasami myślę, że to po prostu zbyt proste .... Dzięki! – Matte

+0

Czy mogę zmodyfikować zmienną 'extra'? czy przetrwa po wywołaniu 'get'? – Throoze

+0

@ Throoze Tak, ale należy pamiętać, że wywołanie get jest asynchroniczne. Linia tuż po '$ .get' zostanie uruchomiona przed zakończeniem żądania pobierania, a jeśli zaznaczysz opcję" ekstra ", nadal będzie zawierać niezmienioną wartość. – bfavaretto

1

Nie sądzę, że to możliwe. ale można użyć zmiennej zewnętrznej wewnątrz funkcji

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

Znam ten post jest stary (ER), ale miałem ten sam problem i myślałem, że będę pisać rozwiązanie dla kolejnego faceta. Zasadniczo, podobnie jak w przypadku bfalvretto, funkcje jquery .get() i .post() są asynchroniczne, więc do czasu uzyskania zdalnego adresu URL wartość zmiennej była inna.
Moim rozwiązaniem było wyrzucenie jego części .get() do oddzielnej funkcji, aby ograniczyć zasięg wywołania zwrotnego. Oto, co wymyśliłem:

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

Mam nadzieję, że to pomoże.

+0

Nie mam pojęcia, dlaczego to działa w moim przypadku, ale tak jest, dzięki! Miałem pętlę 'for' z wartością zadeklarowaną w każdej iteracji, ale wciąż używałem wartości końcowej dla wszystkich wywołań' .get'. – Magicode

Powiązane problemy