2013-05-26 69 views
7

Starałem się znaleźć rozwiązanie dla mojego problemu. Nie jestem osobą doświadczającą z javascript, ale szukam sposobu na niewielką zmianę zewnętrznego URL-a js w zależności od zdarzenia onclick na ahref.Jak zmienić adres URL skryptu zewnętrznego?

Teraz mam to w moich tagów głowy:

<script type="text/javascript" src="http://www.domain.com/loader.php?GID=126&go=&sid="></script>

chcę parametr SID być ustawiony na 1 lub 2 w oparciu o onclick na znacznika zakotwiczenia. Program ładujący jest wywoływany za pomocą tego fragmentu kodu, ale identyfikator SID musiałby zostać zmieniony przed przed wywołaniem programu ładującego.

<a href="/#download" onclick="javascript:Load_126(); return false;">

Czy ktoś mógłby mi powiedzieć, że jeśli jest to możliwe? A może wskażesz mi właściwy kierunek?

Pozdrawiam,

Sedoc94

EDIT 1: Zostałem skierowany w kierunku i że mogę dostać tego zrobić z jQuery.getScript() Ale nadal nie mają pojęcia, w jaki sposób należy wykorzystać ją do mojego przypadku.

EDIT 2: Ponieważ skrypt musi zostać pobrany z domeny zewnętrznej, będę musiał użyć funkcji $ .ajax().

Teraz mam:

function loadGame(sid){ 
    $.ajax({ 
     url: 'http://www.domain.com/loader.php?GID=126&go=&sid='+sid, 
     dataType: "script", 
     crossDomain: true, 
     success: gLoad_12603() 
    }); 
} 

Z ahref onclick Dzwonię funkcję loadGame, ale konsola mówi: Uncaught ReferenceError: gLoad_12603 is not defined. To powinno działać. Ale zgaduję, że w jakiś sposób daje to błąd, ponieważ funkcja istnieje tylko w kodzie skryptu, który jest zwracany z zewnętrznego adresu URL.

Jakieś pomysły, jak mogę to sprawić?

+0

Nie sądzę, że to możliwe, aby zmienić script src w locie, jak kod JS musiałyby być przeładowane . Dlaczego nie skorzystać z prostej AJAX do tego zadania? Sprawdź [jQuery.get] (http://api.jquery.com/jQuery.get) – casraf

+0

dodaj Eventhandler na obiekcie ajax onreadystatechange, ale jeśli używasz jquery przeczytaj ten http: //api.jquery.com/Ajax_Events/ – Givi

+0

Po prostu to przeczytałem, ale mówi mi, że muszę używać programu obsługi zdarzeń "sukcesu", którego już używam? –

Odpowiedz

2

Musisz podać oddzwonienie powodzenia, które zostanie wykonane po zakończeniu żądania AJAX. Właśnie teraz mówisz gLoad_12603() z paratezy i wykonywaniem funkcji ZANIM jeszcze inicjowane jest żądanie AJAX. Nie można po prostu usunąć paratezy, ponieważ jQuery może próbować uzyskać odwołanie do funkcji gLoad_12603 przed faktycznym zainicjowaniem żądania AJAX. Więc trzeba owinąć wezwanie do gLoad_12603() w funkcji, aby zapewnić wszystko działa out:

function loadGame(sid){ 
    $.ajax({ 
     url: 'http://www.domain.com/loader.php?GID=126&go=&sid='+sid, 
     dataType: "script", 
     crossDomain: true, 
     success: function() { 
      gLoad_12603(); 
     } 
    }); 
} 
+0

Ten mały detal wydawał się załatwiać! Dziękuję Ci bardzo! –

1

jQuery.getScript()

function loadScript(sid) { 
    $.getScript("http://www.domain.com/loader.php?GID=126&go=&sid="+sid, function(script, textStatus, jqxhr) { 
     //code you want to be executed after the script is loaded inside the page 
     //you can delete this callback if you don't need it 
    }); 
} 

i używać go w ten sposób, zmieniając sid na każdej kotwicy mieć różne skrypty ładowane:

<a href="/#download" onclick="javascript:loadScript(126); return false;"> 
<a href="/#download" onclick="javascript:loadScript(127); return false;"> 
1

Spróbuj usunąć nawias "()" w „sukcesu: gLoad_12603() ".

Powiązane problemy