1/** 2 * Zu tq-tools EasyREST 3 */ 4 5// ID des zuletzt gesendeten AJAX-Requests merken 6var tqtools_easyrest_mailster_add_lastid; 7// Formular-Objekt (für Ausgabe der Antwort) 8var tqtools_easyrest_mailster_add_formobject; 9 10jQuery(function () { 11 // In's Submit der Mailster-Add-Formulare hängen 12 jQuery('.tq-tools-easyrest-mailster-add').on('submit', tqtools_easyrest_mailster_add_submit); 13}); 14 15/** 16 * Erstellt aus den Daten des übergebenen Formular-Objekts (DOM) ein Objekt mit Namen und Daten der Felder 17 * 18 * Eigentlich sollte man meinen dafür gibt es eine fertige Lösung aber weder mittels jQuery.serializeArray() 19 * noch mittels der FormData-Klasse lässt sich das so handhaben, dass man es bequem an den Ajax-Aufruf übergeben 20 * und dann serverseitig als Hash empfangen kann. 21 * 22 * Vermutlich liegt's an der grundsätzlichen Komplexität der x-mehrdimensionaler Daten. 23 * 24 * Hiermit wird definiert: Wir arbeiten intern mit einem Objekt welches Properties mit den Namen der 25 * Felder enthält, denen je der Wert zugeordnet ist. 26 * Implementiert wird erst mal nur eine ein-dimensionale* Lösung, die derzeit aber völlig ausreicht. 27 * Wenn man mehr braucht erweitert man das eben aber die Grundidee des Objekts bleibt erhalten 28 * 29 * 2021-05-20: Ich sehe eben im tq-mailsform, dass bei Matthias ein einfaches: 30 * formdata = new FormData(document.getElementById('tqmailform_form')); 31 * funktioniert! 32 * 33 * @param oform Das Formularobjekt 34 */ 35function tqtools_easyrest_collectFormData(oform) { 36 var arrayData = jQuery(oform).serializeArray(); // Liefert ein Array mit 0: {name: "mylist", value: "thevalue"} ... 37 var objectData = {}; 38 var element = null; 39 for (var i = 0; i < arrayData.length; i++) { 40 element = arrayData[i]; 41 if (typeof element === 'object') { // Wir nehmen erst mal nur die {name: "mylist", value: "thevalue"}-Dinger 42 objectData[element.name] = element.value; 43 } 44 } 45 return objectData; 46} 47 48/** 49 * Dummy-Funktion als Beispiel wie man ein onsuccess-Event im Formular verwenden kann. 50 * @param oForm 51 */ 52function tqtools_easyrest_onsuccessdummy(oForm) { 53 alert('This is the dummy implementation for onsuccess.\nPlease rebuild with your own function.'); 54 console.log(oForm); 55} 56 57/** 58 * Rest-Aufruf um eine Eintragung in den Mailster-Newsletter durchzuführen. 59 * Callback ist tqtools_easyrest_cb_checkemail() 60 */ 61function tqtools_easyrest_mailster_add_submit(e) { 62 63 var urlRequest = g_tqtools_easyrest_url_restv1 + '/mailster-add'; 64 65 var objectData = tqtools_easyrest_collectFormData(e.target); 66 67 // DOM-Objekt des Formulars merken 68 tqtools_easyrest_mailster_add_formobject = e.target; 69 70 // Im Paylout direkt sind die Metas und ein 'data' mit den Formulardaten 71 var payload = { 72 'source': 'form-submit', 73 'data': objectData 74 }; 75 76 e.preventDefault(); 77 78 tqtools_easyrest_mailster_add_lastid = tqtools_easyrest_sendREST(urlRequest, payload, tqtools_easyrest_cb_mailster_add); 79 80} 81 82// CALLBACK für AJAX-Aufruf von tqtools_easyrest_mailster_add_submit() 83function tqtools_easyrest_cb_mailster_add(oJSON, textStatus, jqXHR) { 84 85 if (!oJSON) { 86 return; 87 } 88 89 if (oJSON.clientid != tqtools_easyrest_mailster_add_lastid) { // War nicht der letzte Aufruf 90 return; 91 } 92 93 var source = oJSON.source; // Von uns mitgegebener 'source'-Wert 94 95 var status = oJSON.status; // 'OK' oder 'ERROR' 96 var statuskey = oJSON.statuskey; // Feinerer Status, z.B. 'INVALID_EMAIL'. Details in EasyREST->rest_mailster_add(). 97 var message = oJSON.message; // Nachricht als Text/html. Ist zur Ausgabe an den Benutzer gedacht 98 99// var oData = oJSON.data; // Rückgabe-Daten des RESTs. Müssten gesetzt sein aber hier keine Verwendung 100 101 var jListForm = jQuery(tqtools_easyrest_mailster_add_formobject); 102 103 var html = ''; 104 105 if (status === 'OK') { 106 107 // Die Erfolgsmeldung ersetzt das komplette <form> 108 109 html = '<div class="alert alert-success">' + message + '</div>'; 110 jListForm.html(html); 111 112 // Sollen wir eine bestimmte Funktion aufrufen, z.B. um ein Event zu melden? 113 var onsuccess = jListForm.data('onsuccess'); 114 if (onsuccess) { 115 if (typeof window[onsuccess] == 'function') { 116 window[onsuccess](tqtools_easyrest_mailster_add_formobject); 117 } 118 } 119 120 } else { 121 122 // Die Fehlermeldung als erstes Kind des Forms 123 124 var jListChildren = jListForm.children('div.alert-danger'); 125 if (jListChildren.length === 0) { // Wir haben noch kein Error-Kind 126 html = '<div class="alert alert-danger">' + message + '</div>'; 127 jListForm.prepend(html); 128 } else { 129 html = message; // Div ist schon da 130 jListChildren.html(html); 131 } 132 133 } 134 135} 136 137/** 138 * Erledigt das, was allen Posts an unsere REST-API gemeinsam ist. 139 * 140 * @param oPayload object die zu schickenden Daten. Die Properties des Objects selbst sind verschiedene Metas wie 'source' 141 * und dann in 'data' ein Objekt der eigentlichen Daten (Formulardaten) 142 * @return die last-id zur Identifikation des (letzten) Aufrufs 143 */ 144function tqtools_easyrest_sendREST(urlRequest, oPayload, callback_success) { 145 146 var lastclientid = new Date().getTime(); 147 148 oPayload.clientid = lastclientid; 149 oPayload.lang = g_tqtools_easyrest_lang; 150 151 var settings = { 152 type: 'POST', 153 url: urlRequest, 154 data: oPayload, 155 success: callback_success, 156 dataType: 'json' 157 } 158 jQuery.ajax(settings); 159 160 return lastclientid; 161 162}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.