Ajax-System

tsbmusic

Erfahrenes Mitglied
Moin moin,

ich hab mir selbst n kleines plugin zurecht gebastelt, aber das funktioniert noch nicht so ganz. Es geht darum die Seiten mit ajax zu laden. Hier mal der Code:

Code:
(function($){

jQuery.ajxDefaults = {
    target: "#main",
    event: "click",
    link: false,
    method: "GET",
    loadHash: false,
    tagToLoad: false,
    title: false,
    params: "__a=1",
    contentType: "application/x-www-form-urlencoded",
    dataType: "html"
};

jQuery.fn.ajx = function(options) {
    return this.each(function() {
        current = jQuery.extend({}, jQuery.ajxDefaults, options);

        jQuery(this).bind(current.event,function(){
            jQuery(this).ajxAnalyse(current);
            alert(current.link);
            jQuery.ajxLoad(current);
            if(jQuery(this).is("a") || jQuery(this).is("form")) return false;
        });
    });
};

jQuery.fn.ajxAnalyse = function(current){
    if(jQuery(this).is("a")){
        if(!current.link){
            var link = jQuery(this).attr('href').replace(/^#/, "");
			current.link = link || current.link;
        }
    } else if(jQuery(this).is("form")){
        if(!current.link){
            current.link = jQuery(this).attr("action");
        }
        if(!current.event){
            current.event = "submit";
        }
    }
}

jQuery.ajxLoad = function(current){
    jQuery.ajax({
		type: current.method,
		url: current.link,
		dataType: current.dataType,
		data: current.params,
		contentType:current.contentType,
		processData:true,
		cache:current.cache,
        success: function(data){
            alert(data);
        },
        error: function(msg){
            alert("Es ist ein Fehler aufgetreten. Bitte versuch es später nochmal.");
        }
    });
};

})(jQuery);

Eingebunden wird das ganze dann mit $('a').ajx(); aber das funktioniert irgendwie nicht. Sieht jemand vielleicht den oder die Fehler?

Gruss
tsbmusic
 
Dreh das mal um

Javascript:
current.link = link || current.link;
//Umgedreht
current.link = current.link || link;
 
Hat sich leider nichts verändert? Aber was sollte das auch bewirken?

Also das Problem liegt irgendwie darin das er den Link nicht erkennt. Es wird immer der Link genommen der als erstes angeklickt wurde. Und der ist dann irgendwie auf allen drauf?
 
Also bei mir funktioniert es nach der Änderung. Wenn du die Reihenfolge dort nicht umdrehst, nimmt er bei href="#" als url Wert "false", was zum Fehler führt. Umgedreht nimmt er den Leerstring, was dazu führt, dass das aktuelle Dokument angefordert wird.

Da deine Fehlerbeschreibung nur lautete "aber das funktioniert irgendwie nicht", konnte ich ja nicht ahnen, dass du folgendes Problem hast

Es wird immer der Link genommen der als erstes angeklickt wurde. Und der ist dann irgendwie auf allen drauf?

Wie soll man das bitte aus deinem ersten Post herauslesen?

Edit: Das er immer den ersten Link nimmt, liegt einfach daran, dass beim ersten Klick der Wert für current.link gesetzt wird und nicht mehr überschrieben. Also musst du deine "ajxAnalyse" Funktion umbauen, denn die Prüfungen "if(!current.link)" funktionieren nur beim aller ersten Aufruf.
 
Zuletzt bearbeitet:
bei mir läuft das trotzdem noch nicht. :(

Aber was läuft denn nicht? Wenn ich die ifs entferne, nimmt er bei jedem Klick die richtige URL.

Edit:

Javascript:
jQuery.fn.ajxAnalyse = function(current){
	if(jQuery(this).is("a")){
		var link = jQuery(this).attr('href').replace(/^#/, "");
		current.link = link;
	} else if(jQuery(this).is("form")){
		current.link = jQuery(this).attr("action");
		current.event = "submit";
	}
}


Edit2: Noch was ganz anderes. Wieso benutzt du eigentlich überall "jQuery" und nicht "$"? Du übergibst dir doch extra "jQuery" an die Anonyme Funktion.
 
Zuletzt bearbeitet:
Danke jetzt funktionierts. :)

Aber ich hab dazu noch ne Frage. Wie kann ich eine Funktion aus dem geladenen Script direkt ausführen?
 
Nein ich meine wenn ich über das Plugin eine Seite lade und die ein javascript Funktion zurückgibt wie ich die dann ausführen kann.
 
In dem du ein neues Script-Tag erstellst und den Code einfügst. Z.B. so

Javascript:
//Käme jetzt vom AJAX Aufruf als String
var s = 'function foobar() {alert("Foobar")};';

$('<script type="text/javascript">').text(s).appendTo('head');

foobar();
 
Zurück