it-swarm.com.de

JFactory :: getApplication () -> input-> post-> get () schneidet leere untergeordnete Arrays / Objekte aus

Ich sende einen POST Ajax-Aufruf wie folgt:

var request = {
    option    : 'com_ajax',
    module    : 'mod_test',  // to target: mod_test
    method    : 'Test',  // to target: function TestAjax in class modTestHelper
    format    : 'raw',
    data      : {a: [], b: {}, c: [0], d: [null]}
};
$.ajax({method: 'POST', data: request})
// .success( ...yatta yatta

Ich erhalte mit:

$data = JFactory::getApplication()->input->post->get('data', array(), 'array');

Das übergebene leere Subarray (a) und das Unterobjekt (b) werden jedoch gelöscht, bevor mein PHP-Skript erreicht wird. Der Inhalt von $data Ist also ['c'=>'0', 'd'=>['']]. Mit anderen Worten, wenn ich isset($data['a']) oder isset($data['b']) aufrufe, werden sie als false ausgewertet.

Für mein Modul habe ich am Ende den String 0 Übergeben, um ein leeres Array darzustellen, aber mein Code wäre aufgeräumter, wenn ich ein leeres Array an php übergeben könnte. (Für mein Projekt hat die erste Ebene eine bekannte Anzahl von Elementen, nur die Subarrays werden dynamisch generiert.)

  1. Ist dies ein Fehler, eine Funktion und/oder ein bekanntes Verhalten?
  2. Kann ich meine JFactory... - Zeile anpassen, um leere Subarrays zu akzeptieren?

Ich habe einige Einsichten, aber keine vollständige Lösung aus diesen verwandten Antworten erhalten:

Ich benutze Joomla 3.8.6

1
mickmackusa

Wenn Sie $ _POST in die Ajax-Methode Ihres Helfers einfügen, werden Sie feststellen, dass diese leeren Arrays den Server nicht erreichen. Das Eingabeobjekt von Joomla hängt vollständig vom Abrufen der Werte aus $ _POST ab.

JQuery Ajax übergibt keine leeren Arrays. Lesen Sie hierzu beispielsweise Folgendes weiter: https://stackoverflow.com/questions/9397669/jquery-ajax-jsonp-how-to-actually-send -ein-Array-auch-wenn-es-leer ist

2
jamesgarrett