Laden...

JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)

Erstellt von UNeverNo vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.327 Views
UNeverNo Themenstarter:in
153 Beiträge seit 2007
vor 9 Jahren
JQuery/JScript: Script löst auf Server Fehler aus, lokal nicht (JQuery Autocomplete)

Ich habe derzeit ein Problem, was mich ein wenig ratlos macht. Ich habe mir eine Funktion gebastelt, die bei Buttonclick mittels JQuery Dialog und JQuery Autocomplete mich nach Daten in einer Quelle suchen läßt. Das funktioniert als lokale Datei (1.html) wie erwartet.

Wenn ich das Ding jetzt in meine ASP.NET-Seite in einer js-Datei einbette und aufrufe funktioniert nur noch ein Teil davon. So wird der Dialog aufgepoppt, aber nach kurzer Denkpause (der Aufbereitung der Daten) wieder geschlossen. Das Verhalten weicht also von dem lokalen ab. Der Code ist 100% identisch, ich habe es extra nochmal abgeglichen.

Ich konnte jetzt identifizieren, dass er im Autocomplete ein Event offenbar nicht feuert, ich habe aber keine Ahnung wieso nicht.


    var tag = $("#txbSearchDataSource").autocomplete({
        minLength: 0,
        source: function (request, response) {
            //hier kommt er nie rein
        }
    })

Da er den Dialog wieder zuklappt und ein Postback ausgelöst wird, gehe ich eigentlich davon aus, dass ein Fehler aufgetreten ist - gibt es einen Weg an den ranzukommen?

Grüße,
Chris

"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)

742 Beiträge seit 2005
vor 9 Jahren

Mal in die Konsole im Browser geschaut? Glaube F12 in Chrome und IE

UNeverNo Themenstarter:in
153 Beiträge seit 2007
vor 9 Jahren

Ja, ich hab wie gesagt im Firebug debuggt.

Grüße,
Chris

"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)

F
10.010 Beiträge seit 2004
vor 9 Jahren

Davon das du eine Function in eine .js auslagerst wird sie noch lange nicht ausgeführt.

Hast du das in eine selbstausführende Funktion geschrieben?

L
13 Beiträge seit 2013
vor 9 Jahren

nur so eine Vermutung.
Die Textbox besitzt nicht rein zufällig runat="server"?
Wenn doch, musst du diese im JS über die Klasse suchen und nicht per ID.

UNeverNo Themenstarter:in
153 Beiträge seit 2007
vor 9 Jahren

Davon das du eine Function in eine .js auslagerst wird sie noch lange nicht ausgeführt.

Hast du das in eine
>
geschrieben?

Nein, habe ich nicht.

Wird aber, wie geschrieben, auch so ausgeführt. Das sehe ich im Debugger und auch der Dialog kommt hoch. Wird nur sofort wieder geschlossen.

nur so eine Vermutung.
Die Textbox besitzt nicht rein zufällig runat="server"?
Wenn doch, musst du diese im JS über die Klasse suchen und nicht per ID.

Nein, die Beispiele sind wirklich zu 100% identisch. Die Textbox injeziere ich per JS erst am Anfang der Funktion.

Grüße,
Chris

"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)

16.827 Beiträge seit 2008
vor 9 Jahren

Mit der Fehlerbeschreibung kann das so ziemlich alles sein.
Das 100%tig identisch kann man eigentlich ausschließen; sonst würds gehen, wa?

Wenn Du keine selbstausführende Funktion verwendest, dann kann es gut sein, dass die Ausführung läuft, obwohl die nötigen HTML Elemente noch gar nicht da sind.
Deswegen verwendet man i.d.R. auch selbstausführende Methoden, da die erst laufen, wenn wirklich alles (nötige) da ist.
Lokal hast Du vielleicht einfach das Glück, dass es einfach schneller lädt.
Selbst im jQuery Beispielcode wird auf $(function() {}); hingewiesen und es verwendet. Man muss natürlich auch lesen.

Du sagst zwar, dass Du gedebuggt hast; aber nicht wie.
Verwende doch einfach ein simples console.log(), damit Du siehst, was aufgerufen wird und was nicht.

Spätestens dann siehst Dus ja. Wir können und werden so ein Debuggung nicht für Dich übernehmen.
Aber so ist das stupides Raten mit der Glaskugel.

UNeverNo Themenstarter:in
153 Beiträge seit 2007
vor 9 Jahren

Ich weiß echt nicht, was die unfreundliche Antwort soll?

Mit der Fehlerbeschreibung kann das so ziemlich alles sein.
Das 100%tig identisch kann man eigentlich ausschließen; sonst würds gehen, wa? Erst eine Unterstellung. Und ja, die Funktion ist 100% gleich, aber natürlich sind auf der live-Server-Seite mehr Controls und JS-Code, die aber keinen Einfluß darauf haben sollten.
Wenn Du keine selbstausführende Funktion verwendest, dann kann es gut sein, dass die Ausführung läuft, obwohl die nötigen HTML Elemente noch gar nicht da sind.
Deswegen verwendet man i.d.R. auch selbstausführende Methoden, da die erst laufen, wenn wirklich alles (nötige) da ist.
Lokal hast Du vielleicht einfach das Glück, dass es einfach schneller lädt. Wie gesagt poppt ja was hoch, u.a. auch die Textbox mit dem Autocomplete was nicht ausgeführt wird, also daran sollte es nicht liegen.
Selbst im jQuery Beispielcode wird auf $(function() {}); hingewiesen und es verwendet. Man muss natürlich auch lesen. Genau, ich lese nicht, nur weil ich es nicht genauso mache wie es irgendwo gemacht wird.
Du sagst zwar, dass Du gedebuggt hast; aber nicht wie. Ich schrieb doch bereits was von Firebug? Ich habe dort Breakpoints u.a. im obigen Codeblock gesetzt und gesehen, dass er dort auf dem Server nie reinläuft, lokal hingegen schon.
Spätestens dann siehst Dus ja. Wir können und werden so ein Debuggung nicht für Dich übernehmen. Schreib ich irgendwo, dass das irgendjemand machen soll? Ich fragte nach, wie ich an den Fehler der da offenbar auftritt, rankomme - und damit meine ich Tools oder sonstige Vorschläge - und wie mir da console.log() weiterhilft wüsste ich nicht.
Aber so ist das stupides Raten mit der Glaskugel. Ist es, wenn Du andere Vorschläge hast, nur her damit. Danke.

Grüße,
Chris

"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)

16.827 Beiträge seit 2008
vor 9 Jahren

Die Antwort ist nur unfreundlich, wenn man sie so auffasst 😉
Korrekt: die Umgebung ist nicht die gleiche, damit wird die Ausführung auch nicht die gleiche sein.

Besonders, da Du Dich nicht mehr auf dem lokalen System befindest, ist es umso wichtiger, dass das Javascript erst dann ausgeführt wird, wenn alle Daten vorhanden sind.
Zudem hat $(function() {}); noch weitere Vorteile (scope), was in FZelles Link beschrieben ist.

Wenn man versteht, wie jQuery funktioniert, dann kann man zumindest ein paar Dinge überprüfen:

$("#txbSearchDataSource") gibt ein Array zurück - egal ob ID unique ist oder nicht.
Ergo könntest Du hier length prüfen.
Da es eben ein Array ist, wird autocomplete() in einer Schleife ausgeführt. Da _wahrscheinlich _das Array leer ist, weil nmoch keine Elemente gefunden werden (==> Script Ausführung ist zu früh!), wird eben auch Deine beanstandete Funktion nicht ausgeführt.

Da der Debugger in den Browsern hier nicht so dolle umgesetzt ist wie der von Visual Studio, wo man length direkt als Eigenschaft abfragen kann, kommst Du hier im console.log() gar nicht drum herum.

Trotz Deiner mehr als pampigen Reaktion: bitte.