Hallo, ich weiß nicht ob der Titel so passend ist aber ich wusste nicht wie ich es andes nennen soll. Folgendes Problem: ich habe ein ExtJs-Formular über dass ich einen Artikel-Import starte. Das Formular und auch der Import funktionieren an sich. Wenn ich meinen Controller direkt im Browser aufrufe läuft der Import sauber durch und gibt im Anschluss auch den korrekten Json-String zurück. [quote] {„success“:true,„message“:„Successfully imported 175 Articles with 4704 Variants in 53.42 seconds“} [/quote] Wenn ich den Import nun aber im Backend über mein Formular starte wird anstatt der Erfolgsmeldung eine JavaScript-Fehlermeldung in der Konsole ausgegeben und das Backend ist nur noch durch einen Reload wieder verwendbar: [quote] TypeError: undefined is not an object (evaluating ‚o.result.message‘) [/quote] Das Formular funktioniert. Der Import von Kategorien beispielsweise läuft und gibt mir auch die Korrekte Meldung aus. Hier mein ExtJs-Fomular: var toolbar = Ext.create('Ext.toolbar.Toolbar', { dock: 'bottom', cls: 'shopware-toolbar', /\* {if {acl\_is\_allowed privilege=import}} \*/ items: ['-\>', { text: me.snippets.start, cls: 'primary', formBind: true, handler: function () { var form = this.up('form').getForm(); if (!form.isValid()) { return; } form.submit({ url: ' {url module=backend controller=MyController action=import}', waitMsg: me.snippets.uploading, success: function (fp, o) { Ext.Msg.alert('Result', o.result.message); }, failure: function (fp, o) { Ext.Msg.alert('Fehler', o.result.message); } }); } }] /\* {/if} \*/ });
meine Import-Methode im PHP-Controller sieht so aus: public function importAction(){ @set\_time\_limit(0); $type = strtolower(trim($this-\>Request()-\>getParam('type'))); switch($type){ case 'categories': $result = $this-\>importCategories(); break; case 'articles': $result = $this-\>importArticles(true); break; case 'images': $result = $this-\>importImages(); break; default: $result = array( 'success' =\> false, 'message' =\> sprintf("Could not handle import type: %s or type is missing", $type) ); } $this-\>View()-\>assign($result); return; }
$this->importArticle() gibt folgendes zurück: return array( 'success' =\> true, 'message' =\> sprintf("Successfully imported %s Articles with %s Variants in %s seconds", $count['articleCount'], $count['variantCount'],$count['runtime']) );
Der Import an sich funktioniert wie gesagt. Wenn ich die Methode direkt aufrufe ist alles gut. Und auch über ExtJs läuft der Import bis zum Ende durch. Es wird halt nur kein korrekter response geliefert. Hat jemand sonst einen Tipp woran es liegen kann? Vielen Dank.
1.) Schau dir mal die response an, ob die Daten tatsächlich wie gewünscht ankommen: sonstiges-f58/faq-haufig-gestellte-fragen-t24425.html#p106944 2.) Schau dir mal im ExtJS dein Objekt mit console.log( o ) an, ob hier korrekte Daten liegen. Viele Grüße
Hallo und danke für die Antwort. [quote=“Aquatuning GmbH”]1.) Schau dir mal die response an, ob die Daten tatsächlich wie gewünscht ankommen[/quote] Die Daten kommen wie gewünscht an. Wie oben geschrieben wird ein korrekter Json-String [quote=“Aquatuning GmbH”] 2.) Schau dir mal im ExtJS dein Objekt mit console.log( o ) an, ob hier korrekte Daten liegen. [/quote] Ein console.log bringt leider gar nichts – es wird nichts ausgegeben. Das Fenster mit dem Progressbar geht einfach zu und in der Konsole wird o.g. Fehler geworfen. Wenn ich das ganze mit weniger Artikel versuche geht es ohne Fehler. Es scheint fast so als ob das ganze ExtJs-Seitig in einen Timeout läuft. Der Import läuft ja im Hintergrund bis zum Ende durch.
so, wie vermutet läuft Ext da in einen Timeout. Folgendes hilft: form.submit({ url: ' {url module=backend controller=Importer action=import}', timeout : 1200000, waitMsg: me.snippets.uploading, success: function (fp, o) { Ext.Msg.alert('Result', o.result.message); }, failure: function (fp, o) { Ext.Msg.alert('Fehler', o.result.message); } });
Ich konnte in der ExtJs-Doku nichts darüber finden. Ich würde den Timeout hier gern auf unendlich stellen. Der Wert 0 hat allerdings nicht den gewünschten Effekt. Hat jemand einen Tip?
Ich hatte das Problem zwar bisher nicht, aber da das Migration-Tool ja auch teilweise mit langen Antwortzeiten arbeitet habe ich da gerade mal kurz reingeschaut. z.B. hier: https://github.com/shopwareLabs/SwagMig … rd.js#L267 Oder in den Backend Ext-Js-Controllern z.B. hier: https://github.com/shopware/shopware/bl … t.js#L1979 timeout von 4000000 Spricht dafür dass die Lösung tatsächlich ist einfach extrem hohe Timeouts zu setzen.
[quote=„t2oh4e“] Spricht dafür dass die Lösung tatsächlich ist einfach extrem hohe Timeouts zu setzen.[/quote] hi, so funktioniert das für mich jetzt auch. Ich hatte bisher nur beim Import-Modul geschaut und da ist kein timeout definiert. Das ganze scheint auch tatsächlich nicht dokumentiert zu sein. Ich kennzeichne das hier jetzt mal als gelöst… Viele Grüße, Heiko