Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe und besinnliche Weihnachten!

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Hilfe bei JS (AJAX) Funktionen
#1
Hallo zusammen,

seit einigen Tagen kämpfe ich mit der Anpassung der thankyoulike.js des ThankYou/Likes Plugins.

Mein Problem ist die Ausgabe der error() Funktion über jGrowl.

Das Plugin hat eine Option zur Limitierung der Thanks/Likes pro Tag bekommen. PHP seitig funktioniert die Bremse und es sind nach Erreichen des Limits keine weiteren Thanks/Likes möglich. Nur AJAXseitig gibt es das Problem, dass via jGrowl weiterhin angezeigt wird, dass das Thanks/Likes gezählt wurde. Die gesetze error() Meldung wird ignoriert.

Was ich mit vorstelle ist, dass beim Klicken des ADD Button geprüft wird ob eine error() Meldung besteht, die error() Meldung via jGrowl ausgegeben wird und die js Funktion sofort beendet wird.

Teilweise funktioniert es mittlerweile, nur wird jetzt die error und Erfolgsmeldung zusammen angezeigt und die Thanks-Liste aufgeklappt, obwohl sie leer bleibt.

Meine bisherigen "Erfolge" sind:
PHP-Code:
......
errMsg: function(request)
{
var 
json = $.parseJSON(request.responseText);
if(
json.hasOwnProperty("errors"))
{
$.
each(json.errors, function(imessage)
{
$.
jGrowl(message, {theme:'jgrowl_error'});
});
}
document.body.style.cursor 'default';
},

add: function(pid)
{
if(
use_xmlhttprequest == && tylEnabled == 1)
{
if(
tylUser == 0)
{
return 
true;
}
$.
ajax(
{
method'post',
dataType'json',
url'thankyoulike.php?ajax=1&action=add&pid='+pid+'&my_post_key='+my_post_key,
complete: function (request)
{
thankyoulike.errMsg(request);
},
success: function (data)
{
thankyoulike.addDone(datapid); 
}
}); 
document.body.style.cursor 'wait';
return 
false;
}
else
{
return 
true;
}
},

addDone: function(datapid)
{
if(
tylDisplayGrowl == 1)
{
$.
jGrowl(tylSend '<br />' '<span id="tyllimits_'+pid+'">' tylLimitsLeft-- + '</span>' tylLimitsString, {theme:'jgrowl_success'}); 
}
$(
"#tyl_"+pid).html(data.tylData);
$(
"#tyl_"+pid).css('display'"");
$(
"#tyl_btn_"+pid).html(data.tylButton);
document.body.style.cursor 'default';
},
....... 

Die entsprechende Fehlermeldung wird hiermit definiert:
PHP-Code:
if($mybb->usergroup['tyl_limits_max'] != && $mybb->settings[$prefix.'limits'] == "1")
{
$timesearch TIME_NOW - (60 60 24);
$query $db->simple_select($prefix."thankyoulike""*""uid='{$mybb->user['uid']}' AND dateline>'$timesearch'");
$numtoday $db->num_rows($query);

// Reached the quota - error.
if($numtoday >= $mybb->usergroup['tyl_limits_max'])
{
error($lang->sprintf($lang->tyl_error_reached_max_per_hour$pre2));
}

Wäre schön, wenn mir da jemand ein paar Tipps geben könnte.....DANKE!
Zitieren
#2
Hallo ,
ich denke zwar selber nicht das ich wirklich helfen kann, nur was mir auffiel das nicht immer der Abschluss da am Schluss ( ; ) ist

Ich bin seid 2 Monaten mit JS und Jq dran und hatte unter anderem gelesen das es oft nicht gemacht wird , aber es selten zu Problemen führen kann,

Mit freundlichen Grüßen
Zitieren
#3
Ich wüsste nicht, wo da ein Semikolon fehlen sollte?

Das Problem ist, dass success() immer ausgeführt wird, wenn vom Server kein Fehler gemeldet wird (und genau das macht error() nicht). Du müsstest success() als eine Abfrage einbauen um die eventuelle Fehlermeldung zu erkennen und zu behandeln.

error() ist für AJAX-Anfragen nicht geeignet, da es immer eine vollständige HTML-Seite ausgibt. JSON wäre besser geeignet.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#4
Danke Stefan, aber genau da liegt mein Problem - da ich leider noch nicht so JS-affin, weiß ich nicht, wo ich da ansetzen sollte. Die momentane thankyoulike.js hat eine Funktion, die wohl nicht korrekt arbeitet.

Code:
if(typeof data == 'string' && data.match(/<error>([^<]*)<\/error>/))
{
message = data.match(/<error>([^<]*)<\/error>/);

if(!message[1])
{
message[1] = "An unknown error occurred.";
}

document.body.style.cursor = 'default';
alert(message[1]);
}

Könntest du diese Funktion evtl. aufschlüsseln - vielleicht kann ich sie passend umbauen?!
Zitieren
#5
Vielleicht hilft dir die Funktion xmlhttp_error() weiter. So wird das mit Javascript abgefragt: https://crossreference.mybb.de/nav.html?...e.html#l54
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#6
Danke, ich schau mal.

In der functions.php hab ich auch was gefunden:
PHP-Code:
// AJAX error message?
if($mybb->get_input('ajax'MyBB::INPUT_INT))
{
// Send our headers.
@header("Content-type: application/json; charset={$lang->settings['charset']}");
echo 
json_encode(array("errors" => array($error)));
exit;


Das könnte doch auch was sein, oder?!
Zitieren
#7
Ja, so geht das auch. Die xmlhttp_error() macht nicht viel anders.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#8
Hab's hinbekommen.....Danke für die Tipps!

=> https://github.com/Cu8eeeR/MyBB_Thank-yo...0022f18f21
Zitieren