Autor Zpráva
jirka2
Profil *
Ahoj, mám takový podivný problem. Na html stránce je následující kód:
<a href="http://www.nekam.cz" onclick="klik(this)">Kamsi</a>
Což při kliknutí na odkaz vyvolá JS funkci, která přes JQuery zavolá PHP program a na serveru se zaznamená, že bylo kliknuto na odkaz:
function klik(adresa) {
    $.get("kliknuto.php?adresa=" + encodeURI(adresa));
}
A pracuje to, dle očekávání. Nyní jsem si doma nainstaloval nový OS (openSuse 12.3 + Firefox 20) a mě to nepracuje, dle apache logu ani se nezavolá program kliknuto.php. Při testovaní pomůže následující úprava:
function klik(adresa) {
    $.get("kliknuto.php?adresa=" + encodeURI(adresa));
    alert(adresa);
}
Po této změně to zase pracuje jako dříve. Pochopitelně toto nelze v produkční verzi použít. Netuším, co je to za problém a jak jej napravit. Může někdo poradit?
Chamurappi
Profil
Reaguji na jirku2:
Příčinou nejspíš je, že se požadavek nestihne vyslat dřív, než člověk uteče na novou stránku. Proč na obyčejné pingnutí používáš AJAX (a ještě k tomu s jQuery)? Zkus to udělat normálně obrázkem, ten má menší režii, takže by mohl stihnout odeslat požadavek dřív, než stránka zanikne.

Další možnost je vyměnit href za nějaký počítací přesměrovávač při kliknutí.
jirka2
Profil *
Chamurappi:
Pokud to upravím dle rady (díky!):
function klik(adresa) {
    var temp = new Image();
    temp.src = "kliknuto.php?adresa=" + encodeURI(adresa);
}
Tak výsledek je stejný, Firefox nic nezaznamená, Internet Explorer ano. Přitom před rokem jsem to vytvářel na starším Firefoxu a šlo to.
_es
Profil
jirka2:
Možno to výsledok neovplyvní, no namiesto encodeURI by mala by byť použitá funkcia encodeURIComponent.
jirka2
Profil *
_es:
To je pravda, výsledek to neovlivní. Jak jsem již psal, ani se nezavolá skript kliknuto.php.
Jan Kupka
Profil
[#5] jirka2

Ahoj, problém bude v tom, jak píše Chamurappi. Prohlížeč tě přesměruje na http://www.nekam.cz dříve, než se stihne odeslat požadavek na kliknuto.php. Na to, jestli se to v nějakém případě povede bych nespoléhal. Tohle řešení je spolehlivé. Akorát z uživatelského hlediska mě osobně na tom vadí to, že u takových odkazů nemůžu kliknout pravým tlačítkem a snadno si zkopírovat původní adresu odkazu. To je ale můj problém :) Pak už by zbýval asi jen ten AJAX, výchozí klik zastavit, provést dotaz na měřící URL, počkat na odpověď a přesměrovat na původní URL.
aDAm
Profil
Reaguji na jirku2:
tipnul bych že to je jednoduše jak psal výše Chamurappi. Prohlížeč ti jednoduše otevře zakliklou stránku dříve než stihne odeslat ten ajaxový požadavek na server. Pokud je pro tebe problém to udělat nějakou redirectovací podstránkou jak radil [#2] Chamurappi tak si tam dej do té funkce malý delay a po jeho uplynutí otevři nový odkaz.

Edit: tak Jan Kupka byl rychlejší ;)
Chamurappi
Profil
Reaguji na Jana Kupku:
mě osobně na tom vadí to, že u takových odkazů nemůžu kliknout pravým tlačítkem a snadno si zkopírovat původní adresu odkazu
To mě také štve. Řeším to tak, že pravé tlačítko stisknu, když jsem kurzorem mimo odkaz, pak nad odkaz přejedu a tlačítko pustím. Menu vyskočí, ale onmousedown se nezpracuje.
Šla by tam též přidat podmínka if(event.button != 2).

Pak už by zbýval asi jen ten AJAX, výchozí klik zastavit, provést dotaz na měřící URL, počkat na odpověď a přesměrovat na původní URL.
I to jde udělat přes new Image() — pokud kliknuto.php vrátí platný obrázek, tak v tu chvíli nastane onload.
jirka2
Profil *
Tak funkci jsem přepsal dle vašich rad takto:
function klik(a) {   
    a.href = "kliknuto.php?url=" + encodeURIComponent(a.href);
    a.onclick = null;
}
A skript kliknuto.php navíc obsahuje vlastní přesměrování. K mé velké radosti to funguje a navíc je zachována informace z které stránky bylo kliknuto (REFERER).
Takže díky za pomoc.
Jan Kupka
Profil
[#8] Chamurappi
To stisknutí pravého tlačítka mimo odkaz je chytré, díky :)

Šla by tam též přidat podmínka if(event.button != 2)
Jasně, zase by se ale nezaznamenaly odkazy otevřené přes pravý klik - otevřít v novém okně/tabu.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: