einfaches Ajax Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • einfaches Ajax Problem

    Hi,

    ich habe gerade mal angefangen mich ein wenig mit Ajax zu beschäftigen.
    Ich habe probiert ein kleines Script zu schreiben, dass alle von meiner Homepage abgehenden Links in einer Datenbank speichert.

    Leider scheint es, als würden nur einige dieser Klicks (wilkürlich, nicht immer die selben) gezählt werden.

    Ich habe für diesen Recht einfachen Zweck jedenfalls Sajax als Framwork gewählt, um mir ein bißchen die Arbeit zu erleichtern.

    Ich habe eine kleine Javascript Funktion geschrieben, die ich in alle Links und Formulare eingefügt habe, ungefähr so:

    <form action="whatever.html" method="get" style="display:inline;" onsubmit="addClick(...);">
    <a href="doesnt_matter.html" onclick="addClick(...);" class="bottom">Linktext</a>

    die Funktion addClick enthält aus Testgründen im Moment nur die auszuführende Funktion selber:

    Quellcode

    1. function addClick(url,session,this_url) {
    2. x_count_click(url,session,this_url,Returner);




    ... welche widerum von Sajax selbst per Export erzeugt wird, ich kopiere sie trotzdem mal:

    Quellcode

    1. // wrapper for count_click
    2. function x_count_click() {
    3. sajax_do_call("count_click",
    4. x_count_click.arguments);
    5. }


    So... Sajax ruft also eine andere Datei auf, die widerum den Link in die Datenbank einträgt.
    Wie gesagt funktioniert das aber nur manchmal.

    Woran kann das liegen?

    Kann es sein, die Seite manchmal verlassen wird, bevor die Anfrage über onclick/onsubmit abgeschickt wurde oder ist das Unsinn?

    Müsste sajax_do_call nicht auf die Rückmeldung warten, bevor dem Link gefolgt wird?

    Bin da etwas hilflos...

    Danke schonmal und viele Grüße
    Simon
  • hi..
    ich denke auch dass der browser nicht unbedingt auf die ajax antwort wartet.
    und manchmal ist die leitung frei und der request geht sofort durch...

    vielleicht kann man das mit nem workaround lösen
    alert oder confirm warten z.b. auf benutzereingaben

    kannst ja etwas einblenden, wie "wollen sie die seite wirklich verlassen"
    oder aber du linkst eine zaehler.php?out=url.de, die den klick zählt und danach weiterleitet
  • Danke für die Antwort, aber alerts / confirms sind absolut tabu ... Eine redirecting page auch.

    Wenn ich das richtig in Erinnerung habe kann man doch mit Ajax den aktuellen Stand des Requests abrufen, so werden doch auch "loading..." divs etc. gemacht.

    Da muss es doch möglich sein, so etwas auch da zu integrieren - sprich: bevor kein Confirm vom Script da ist bleibt die Seite bestehen.

    Aber erstens weiss ich nicht wie man das mit sajax zusammenbringt und zweitens gibt der Debug Modus, wenn ich ihn anschalte, an, dass das Script nicht direkt weiterläuft.

    Ich weiss echt nicht was daran falsch sein soll...
  • die Antwort kommt besser spät als nie:

    du kannst ein bisschen mit JavaScript tricksen.
    Die Idee ist mir beim skripten mit Lightbox gekommen

    Da sehen die Links auch ganz normal aus

    Quellcode

    1. <a href="http://web.de" rel="lightbox">asdasd</a>


    ... werden aber von einer javascript/ajax funktion behandelt.
    Das könntest du ja genauso machen

    Siehe Posting: http://www.easy-coding.de/lightbox-in-ajax-die-loesung-t2179.html#8489
  • rel ist nur ein erlaubtes tag, das sonst nicht oft verwendet wird. Bietet sich also an.

    Ich habe mal einen Wiki Eintrag dazu erstellt:
    [coderwiki]HowTos/JavaScript-Links-abfangen-und-an-Funktion-weiterleiten[/coderwiki]

    Quellcode

    1. <html><head><script type="text/javascript">
    2. function eigeneFunktion(param) {
    3. alert(param);
    4. }
    5. function linkRel(patt) {
    6. var anchors = document.getElementsByTagName('a');
    7. for (var i=0; i<anchors.length; i++) {
    8. var anchor = anchors[i];
    9. var relAttribute = String(anchor.getAttribute('rel'));
    10. if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match(patt))){
    11. anchor.onclick = function () {eigeneFunktion(i); return false;}
    12. }
    13. }
    14. }
    15. </script>
    16. <body onload="linkRel('toplist');">
    17. <a href="asda.html" rel="toplist">HTML Link</a>
    18. </body>
    19. </html>
    Alles anzeigen


    Der ideale Code für Toplisten - wundert mich warum das keiner einsetzt.