2013-05-26 16 views
7

Ich habe gekämpft, um eine Lösung für mein Problem zu finden. Ich bin nicht das einer Erfahrungsperson mit Javascript, aber ich suche nach einer Weise, die externe js URL abhängig von einem onclick Ereignis auf einem ahref leicht zu ändern.So ändern Sie externe Skript-URL onclick?

Im Moment habe ich dies in meinem Kopf tags:

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

Ich mag, dass der SID-Parameter auf 1 oder 2 auf der Basis einen Onclick auf einem Anker-Tag eingestellt werden. Der Lader wird mit diesem Stück Code aufgerufen, aber die SID müsste sich richtig ändern bevor der Loader aufgerufen wird.

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

Gibt es jemanden, der mir sagen könnte, wenn es möglich ist? Und vielleicht zeigen Sie mir in die richtige Richtung?

Grüße,

Sedoc94

EDIT 1: Ich habe in eine Richtung ausgerichtet worden und dachte, ich könnte dies mit jQuery.getScript() getan, aber immer noch keine Ahnung, wie ich es für meinen Fall nutzen sollte.

EDIT 2: Da das Skript aus einer externen Domäne gezogen werden muss, muss ich mit der Funktion $ .ajax() gehen.

Im Moment habe ich:

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

Mit einem ahref Onclick ich die loadGame Funktion aufrufen, aber die Konsole sagt: Uncaught ReferenceError: gLoad_12603 is not defined. Es sollte funktionieren. Aber ich vermute, dass es irgendwie diesen Fehler gibt, weil die Funktion nur in dem Skriptcode existiert, der von der externen URL zurückgegeben wird.

Irgendwelche Ideen, wie ich es zum Laufen bringen kann?

+0

Ich glaube nicht, dass es möglich script src on the fly zu ändern, da der Code JS werden müßte neu geladen . Warum nicht einfach AJAX für diese Aufgabe verwenden? Auschecken [jQuery.get] (http://api.jquery.com/jQuery.get) – casraf

+0

Eventhandler auf Ajax-Objekt onreadystatechange hinzufügen, aber wenn Sie jquery verwenden, lesen Sie diese http: //api.jquery.com/Ajax_Events/ – Givi

+0

Ich habe gerade gelesen, aber es heißt, ich muss den 'Erfolg' Event-Handler verwenden, was ich bereits verwende? –

Antwort

2

Sie müssen einen Erfolgsrückruf bereitstellen, der ausgeführt wird, wenn die AJAX-Anforderung abgeschlossen ist. Genau jetzt sagen Sie gLoad_12603() mit Parathesis und führen die Funktion VOR dem Start der AJAX-Anfrage aus. Sie können die Parathesis nicht einfach entfernen, da jQuery möglicherweise versucht, einen Verweis auf die Funktion gLoad_12603 zu erhalten, bevor auch die AJAX-Anforderung initiiert wird. So haben Sie Ihren Anruf gLoad_12603() in einer Funktion wickeln, um sicherzustellen, alles klappt:

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

Dieses kleine Detail schien den Trick zu machen! Vielen Dank! –

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 
    }); 
} 

Und es auf diese Weise verwenden, auf jedem Anker die sid Wechsel geladen zu haben unterschiedliche Skripte:

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

Versuchen Sie, die Klammern "()" in „Erfolg zu entfernen: gLoad_12603() ".