Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
Paric
Beiträge: 45
Registriert: 25.08.2014, 08:51:04

Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von Paric » 08.01.2015, 12:16:11

Hallo,

ich wieder. Zur Abfrage von Informationen, bzw. Filter von Datenbankabfragen nutze ich die komfortablen Funktionen von Ajax. Die API aus dem Wiki funktioniert dafür prächtig, bis zu dem Punkt wo ich versuchen den Wert "0" zu übergeben, dann übernimmt er diese Variable nicht in den Parametern.

Also meine action-URL lautet z.B.:

Code: Alles auswählen

?TELLA_ajaxapi-action:AjaxAPI=cmd:RnrPool|action:cntRnr|start:0|filter_fax:1|filter_belegt:0|filter_rnr:3%
und das Parameter-Array schaut so aus:

Code: Alles auswählen

Array
(
    [action] => cntRnr
    [filter_fax] => 1
    [filter_rnr] => 3%
)
sprich sowohl der Wert "start" als auch "filter_belegt" sind komplett entfernt worden. Habe schon versucht dem Fehler zu lokalisieren, hat leider nicht geklappt.
Die $_GET sieht korrekt aus, aber der Punkt

Code: Alles auswählen

$parameters = $this->getInput()->getAttributes();
scheint die "0" zu stören, sprich als FALSE zu interpretieren und somit zu ignorieren.

Beste Grüße,
Pit

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 08.01.2015, 20:33:27

Hallo Pit,

hört sich nach einem ähnlichen Problem an, das es mal im RequestHandler gab. Alternativ könnte das auch ein Issue in einem Input-Filter sein, der die "0" als "false" interpretiert wie du schon vermutest. Darf ich dich bitten, imTracker einen Bug dafür zu erstellen?
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 08.01.2015, 20:35:36

Habe nochmal in den Code gesehen und vermute, dass der folgende Teil daran Schuld ist:

Code: Alles auswählen

if (isset($tmpArray[0]) && isset($tmpArray[1])
      && !empty($tmpArray[0]) && !empty($tmpArray[1])
) {
   $inputParams[$tmpArray[0]] = $tmpArray[1];
} 
Entnommen aus ChainedStandardInputFilter Zeile 97. Lösen könnte es ein

Code: Alles auswählen

if (isset($tmpArray[0]) && isset($tmpArray[1])
      && !empty($tmpArray[0]) && (!empty($tmpArray[1]) || (string) $tmpArray[1] === '0')
) {
   $inputParams[$tmpArray[0]] = $tmpArray[1];
} 
Viele Grüße,
Christian

Benutzeravatar
Paric
Beiträge: 45
Registriert: 25.08.2014, 08:51:04

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von Paric » 09.01.2015, 09:33:11

Hallo Christian,

danke für die schnelle Hilfe. Ich habe den Code angepasst, und nun übernimmt er die Werte tadellos. Den Bug habe ich im Tracker eingetragen.
Wünsche ein angenehmes Wochenende.

Grüße,
Pit

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 09.01.2015, 16:32:21

Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 10.01.2015, 15:17:38

Hallo Pit,

Fehler ist nun im master und release-2.1 branch gefixt. Update kann über folgende URLs bezogen werden:
Viele Grüße,
Christian

Benutzeravatar
Paric
Beiträge: 45
Registriert: 25.08.2014, 08:51:04

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von Paric » 13.10.2015, 10:26:10

Mahlzeit,

ich mal wieder.... Es geht wieder um ein Ajax-Problem. Ich vermute mal ich habe einfach nur ein Brett vor dem Kopf. Ich versuche bestimmte Sonderzeichen zu übermitteln. Mit den meisten funktioniert das auch, nur mit zwei habe ich ein Problem: Mit dem Doppelpunkt, und mit dem Enter.

Nun habe ich schon viele Sachen Probiert, unter anderem lasse ich den Doppelpunkt in das URL-konforme Format umwandeln mittels replace in js ( text.replace(/\x3A/g, "%3A"); ). Doch es passiert weiterhin, das alles ab dem Doppelpunkt abgeschnitten wird.

Beste Grüße,
Pit

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 13.10.2015, 14:15:44

Hallo Pit,

schön, dass du mal wieder vorbei schaust! :)

Sofern du mit Formularen arbeitest, könntest du mit serialize() (siehe https://api.jquery.com/serialize/) arbeiten. Sofern auch das nicht hilft könnte es auch an der Apache-Einstellung AllowEncodedSlashes = On zu tun haben.

Sollte das alles nicht helfen, gib mir mal ein bisschen Hintergrund deines Anwendungsfalls.
Viele Grüße,
Christian

Benutzeravatar
Paric
Beiträge: 45
Registriert: 25.08.2014, 08:51:04

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von Paric » 14.10.2015, 14:41:05

Hallo Christian,

vielen Dank für die schnelle Antwort.

Ich habe mein Problem wohl zu ungenau dargestellt. :)

Also, folgender Sachstand. Auf einer Seite habe ich ein Formular mit einer Textarea für die Bemerkungen. Wenn das Formular ausgefüllt ist, wird das ganze über Ajax an eine AjaxAPI-Action gesendet. Da die Seperatoren in der URL aber der Doppelpunkt ":" und der Strich "|" sind, kann die API-Schnittstelle die URI nicht sauber auftrennen.
Das serilize macht im Prinzip nichts anderes als das, was ich von Hand gemacht habe, was so leider nicht funktioniert, da der Server das ganze anscheinend schon vorher wieder auflöst. Die Apache-Einstellung scheint sich aber nur auf Slash und Backslash zu beziehen.

Ich habe inzwischen eine Lösung gefunden, die wie folgt aussieht:

beim senden des Formulars, werden die relevanten Felder durch folgendes Script gejagt:

Code: Alles auswählen

function encodeText(inputText) {
    var text = inputText.toString();

    text = text.replace(/\x3A/g, ":");  // :-Zeichen
    text = text.replace(/\x7C/g, "|"); // |-Zeichen
    
    text = encodeURIComponent(text); // Sonderzeichen in URL-fähige Zeichen umwandeln
    return text;
}
Dort werden die relevanten Sonderzeichen in den HTML-Code umgewandelt, und DANN wird das ganze URI-kompatibel. Damit das ganze dann sauber in der Datenbank gespeichert wird, wird in der AjaxAPI-Action einfach ein html_entity_decode drübergejagt. Und schon habe ich meine Probleme behoben.

Beste Grüße,
Pit

Benutzeravatar
dr.e.
Administrator
Beiträge: 4536
Registriert: 04.11.2007, 16:13:53

Re: Ajax-API aus dem Wiki - keine 0 kann übergeben werden?

Beitrag von dr.e. » 15.10.2015, 08:51:01

Super, dass du eine Lösung gefunden hast! :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast