wywołanie funkcji |
wywołanie funkcji |
30.12.2013, 09:59:49
Post
#1
|
|
Grupa: Zarejestrowani Postów: 173 Pomógł: 14 Dołączył: 27.03.2004 Skąd: Białystok Ostrzeżenie: (0%) |
Witam, mam mały problem i najprawdopodobniej jest to banał. Mianowicie gdy tworzę zewnetrzny plik js poprzez utworzenie tagu <script> w DOMie i wywoluję zawartą w nim funkcje uzyskuję komunikat ReferenceError: user is not defined. natomiast jeśli załaduję klasycznie w htmlu ten sam plik wszystko działa bez problemu.
iframe.js w wielkim uproszczeniu
Ten post edytował SaMi 30.12.2013, 10:30:00 -------------------- Zapraszam na spływy kajakowe rzekami podlasia www.splywy-kajakiem.pl
|
|
|
30.12.2013, 10:36:09
Post
#2
|
|
Grupa: Zarejestrowani Postów: 205 Pomógł: 43 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Odpowiedź kryje się w tej całej ceregieli, którą wykonujesz żeby oszczędzić globalną przestrzeń nazw.
Zmienna "user" to zmienna lokalna anonimowej funkcji w iframe.js. Domyślam się, ze chciałeś przesłać do tej funkcji zmienną window (po literce "w" w argumencie) i tam przypisać ją w następujący sposób na końcu:
Poza tym, po co takie kombinacje? Po co do funkcji anonimowej przesyłać zmienną document, skoro to zmienna globalna zawsze widoczna w każdym zasięgu? Przerost formy nad treścią. Proponowałbym zacząć od importowania skryptów zwykłym znacznikiem <script> , a potem interesować się jakimis tam formami usprawniania tego procesu. Sprawdziłbym jeszcze czy nie lepiej byłoby użyć append zamiast insertBefore. Tutaj specjalistą nie jestem jednak myślę, że problemem może być to, że skrypty są zaimportowane w złej kolejności. |
|
|
30.12.2013, 10:43:54
Post
#3
|
|
Grupa: Zarejestrowani Postów: 173 Pomógł: 14 Dołączył: 27.03.2004 Skąd: Białystok Ostrzeżenie: (0%) |
zakradł się mały błąd który skorygowałem.
Jest to implementacja wyszukiwarki którą pośrednicy zamieszczają na swoich stronach. Na dzień dzisiejszy eksperymentuję i uczę się, także proszę o wyrozumiałość i ewentualne rady -------------------- Zapraszam na spływy kajakowe rzekami podlasia www.splywy-kajakiem.pl
|
|
|
30.12.2013, 12:07:02
Post
#4
|
|
Grupa: Zarejestrowani Postów: 205 Pomógł: 43 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Poza tym proponowałbym - zamiast używania anonimowych funkcji do korzystania z "przestrzeni nazw":
Anonimowe funkcje są fajne - dla małych fragmentów kodu - przynajmniej takie moje zdanie po tym jak potrafią one namieszać w kodzie, który w ostateczności staje się jednym wielkim śmietnikiem. Moduły w dużym stopniu elminują konieczność ich używania jeśli chodzi o moduły. W kodzie czysto obiektowym potrzebne jest już zupełnie inne podejście do tematu. |
|
|
30.12.2013, 14:42:03
Post
#5
|
|
Grupa: Zarejestrowani Postów: 173 Pomógł: 14 Dołączył: 27.03.2004 Skąd: Białystok Ostrzeżenie: (0%) |
Zmieniłem na przestrzenie nazw faktycznie łatwiej to ogarnać. Aczkolwiek moje pytanie z pierwszego posta jest nadal aktualne.
-------------------- Zapraszam na spływy kajakowe rzekami podlasia www.splywy-kajakiem.pl
|
|
|
30.12.2013, 22:36:57
Post
#6
|
|
Grupa: Zarejestrowani Postów: 205 Pomógł: 43 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Odpowiedź na Twoje pytanie jest dość prosta. Otóż tworząc z poziomu JavaScript tag "script" i ustawiając jego źródło informujesz tym samym przeglądarkę, że ma wykonać kolejne zapytanie pod podane źródło, a więc robiąc tak:
przeglądarka zacznie wgrywać nowy adres, w tym przypadku plik skryptu znajdującego się pod ścieżką "iframe.js". Tak się składa, że nie dzieje się to natychmiast, a ładowanie następuje asynchronicznie, w tle, tak jak w przypadku XHR (XmlHttpRequest, czy krócej "AJAX"). Oznacza to, że zmienna "user" zdefiniowana w tamtym pliku nie pojawi się natychmiast, a dopiero po wykonaniu całego procesu: pobrania pliku js i wrzucenia go w dokument. Aby wykonać kod po załadowaniu tego dokumentu należy się posłużyć funkcją zwrotną ("callback'iem"):
Ten post edytował lukasz1985 30.12.2013, 22:38:33 |
|
|
Wersja Lo-Fi | Aktualny czas: 30.05.2024 - 14:38 |