2009-08-07 15 views
8

Jaki jest poprawny sposób przypisania zmiennej do odpowiedzi z jQuery.get()?Przypisz jQuery.get() do zmiennej?

var data = jQuery.get("output.csv"); 

Czytałem, że jQuery.get() musi mieć funkcję zwrotną? dlaczego? i w jaki sposób użyć tej funkcji wywołania zwrotnego, aby przypisać odpowiedź z powrotem do zmiennej danych?

Z góry dziękujemy za pomoc i wyjaśnienia.

Aktualizacja:

Dziękuję wszystkim za odpowiedzi i wyjaśnień. Myślę, że zaczynam wreszcie rozumieć to, co wszyscy mówicie. Mój kod poniżej robi dobrą rzecz tylko pierwszą iterację tego. Reszta iteracji jego pisanie na stronę nieokreśloną. Czy brakuje mi czegoś?

<tbody> 
<table id="myTable"> 

    <script type="text/javascript"> 

     $.get('output.csv', function(data) { 
       csvFile = jQuery.csv()(data); 

       for (var x = 0; x < csvFile.length; x++) { 
        str = "<tr>"; 
        for (var y = 0; y < csvFile.length; y++) { 
         str += "<td>" + csvFile[y][y] + "</td>"; 
        } 
        str += "</tr>"; 
       } 
       $('#myTable').append(str); 


     }); 

    </script> 

</tbody> 
</table> 

Odpowiedz

1

Należy tylko określić funkcję zwrotną w parametrze, aby uzyskać metodę. Twoje dane będą w zmiennej, którą określisz w funkcji.

$.get("output.csv", function(data) { 
    // Put your function code here, the 'data' variable will hold your data. 
}); 
8

Funkcja zwrotna jest wymagany dla asynchronicznych wywołań funkcji, jak GET żądania AJAX. Istnieje opóźnienie między wywołaniem funkcji get a odebraniem odpowiedzi, która może wynosić milisekundę lub kilka minut, więc musisz mieć funkcję zwrotną, która zostanie wywołana, gdy asynchroniczny GET zakończy swoją pracę.

Oto kilka dodatkowych informacji na temat funkcji jQuery's AJAX get: http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype.

przykładów jQuery:

// this would call the get function and just 
// move on, doing nothing with the results 
$.get("test.php"); 

// this would return the results of the get 
$.get("test.php", function(data){ 
    alert("Data Loaded: " + data); 
}); 

Jeśli masz undefined podczas próby użyć zmiennej w funkcji zwrotnej data, otwórz konsolę w Firebug w Firefoksie i oglądać żądania get. Możesz zobaczyć surowe żądanie i odpowiedź, z którą wróci. Powinieneś uzyskać lepsze wskazanie problemu po sprawdzeniu, co jest wysyłane na serwer i co jest wysyłane z powrotem do klienta.

+0

tak, jak pan Obejście niezdefiniowany uzyskiwanie? –

+0

Moja odpowiedź została zaktualizowana z napiwkiem, aby pomóc w rozwiązywaniu problemów z niezdefiniowaną zmienną danych. –

+0

@DCrawmer sprawdź, co mówi pixeline. jeśli analiza żądania pobierania zabiera zbyt dużo, lepiej jest pobrać dane z wywołania zwrotnego. faktycznie to jest właściwy sposób, aby to zrobić. –

3

Właściwie w twoim przykładzie dane będą obiektem zapytania XMLHttpRequest.

var x; 
$.get('output.csv', function(data){ 
    x = data; 
    console.log(x); // will give you the contents. 
}); 
+0

Biorąc pod uwagę (według mnie), że 'get' jest asynchroniczne, czy' log' nie drukuje 'undefined' za każdym razem? –

+0

tak, ten kod daje mi niezdefiniowane za każdym razem, w jaki sposób temu zapobiec? –

+1

umieść wywołanie console.log() wewnątrz oddzwaniacza! – pixeline

3

tsvanharen odpowiedział dobrze na pytanie, ale DCrawmer wciąż nie rozumie. Pozwól mi spróbować wyjaśnić mu. Upraszczam niektóre z tego i wygładzam niektóre szczegóły.

Sprawdź poniższy kod. Jest to dość dużo ten sam kod jak tsvanharen, z wyjątkiem, że ja zastąpiła anonimową funkcję callback z rzeczywistego wskaźnika funkcji i jestem trochę bardziej wyraźny, dzięki czemu można zobaczyć, co się dzieje:

var x = null; 

function myCallback(data) 
{ 
    alert("Data Loaded:" + data); 
} 

$.get("test.php", myCallback); 

// the rest of your code 
alert("The value of X is: " + x); 

Zakładając test.php że trwa jeszcze chwilę lub dwie, aby załadować, zauważy, że porządek alarmy prawdopodobnie pojawią się w:

1. "The value of X is" 
2. "Data Loaded" 

funkcja $.get() działa natychmiastowo. JavaScript porusza się i uruchamia resztę kodu od razu.W tle pobiera twoją stronę w witrynie test.php. jQuery ukrywa niektóre niechlujne szczegóły tego.

Funkcja wywołania zwrotnego (drugi argument do $.get()) działa później (asynchronicznie). Lub, mówiąc inaczej, funkcja myCallback jest programem obsługi zdarzenia. Wydarzenie to "$.get() zakończyło odzyskiwanie danych". Nie uruchamia się do tego momentu. Nie działa, gdy działa $.get()! $.get() właśnie pamięta, gdzie ta funkcja jest dostępna na później.

Funkcja myCallback może działać milisekundy lub minuty później, długo po $.get() została potraktowana.

Jeśli myCallback nie uruchomi się kilka minut później, to jaka jest wartość x po uruchomieniu kodu "Wartość X"? Wciąż jest to null. Istnieje Twój błąd.

Aby wykorzystać dane pobrane ze strony w skrypcie, trzeba robić rzeczy, więcej tak:

  1. Uruchom skrypt, zadeklarować zmienną do przechowywania danych.
  2. Zadzwoń pod $.get(), z funkcją zwrotną do obsługi zwrotu.
  3. Nie rób nic więcej. [A przynajmniej nic, co wymaga danych] Pozwolić stronie po prostu tam usiąść.

    ... kiedyś w przyszłości ...

    X. Twoja funkcja zwrotna będzie biegać i mieć wyniki swojej stronie internetowej. Twoja funkcja zwrotna może: * Wyświetlić dane * Przypisać dane do zmiennej * Zadzwoń do innych funkcji * Przejdź dalej to wesoło.

+0

. Dziękuję bardzo za wyjaśnienie. zobacz moją aktualizację pytania i powiedz mi, co robię źle? dziękuję za pomoc. –

+0

Dziel i rządź. Upewnij się, że plik jQuery.get rzeczywiście zwraca dane, które Twoim zdaniem są. Umieść alert (dane) na początku funkcji, aby upewnić się, że dane zostały poprawnie odczytane z pliku output.csv. (To nie jest dobrze uformowany adres URL, czy na pewno tego właśnie chcesz?) Kontynuuj od tego. –

3

Naprawdę zmagałem się z uzyskiwaniem wyników jQuery ajax w moich zmiennych na etapie "document.ready" zdarzeń.

jQuery's ajax załadowałby moje zmienne, gdy użytkownik wywołał zdarzenie "onchange" w polu wyboru po wczytaniu strony, ale dane nie przesłałyby zmiennych po załadowaniu strony.

Próbowałem wiele, wiele, wiele różnych sposobów, ale w końcu, odpowiedź mi potrzebne było na tej stronie stackoverflow: JQuery - Storing ajax response into global variable

Dzięki kontrybutora Charles Guilbert, jestem w stanie uzyskać dane do moich zmiennych, nawet gdy moja strona ładuje się po raz pierwszy.

Oto przykład skryptu roboczego:

jQuery.extend 
    (
     { 
      getValues: function(url) 
      { 
       var result = null; 
       $.ajax(
       { 
       url: url, 
       type: 'get', 
       dataType: 'html', 
       async: false, 
       cache: false, 
       success: function(data) 
       { 
        result = data; 
       } 
       }); 
      return result; 
      } 
     } 
    ); 

// Option List 1, when "Cats" is selected elsewhere 
optList1_Cats += $.getValues("/MyData.aspx?iListNum=1&sVal=cats"); 

// Option List 1, when "Dogs" is selected elsewhere 
optList1_Dogs += $.getValues("/MyData.aspx?iListNum=1&sVal=dogs"); 

// Option List 2, when "Cats" is selected elsewhere 
optList2_Cats += $.getValues("/MyData.aspx?iListNum=2&sVal=cats"); 

// Option List 2, when "Dogs" is selected elsewhere 
optList2_Dogs += $.getValues("/MyData.aspx?iListNum=2&sVal=dogs"); 
Powiązane problemy