Ankündigung

Einklappen
Keine Ankündigung bisher.

[Firefox] XMLHttpRequest.open erzeugt Exception

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Firefox] XMLHttpRequest.open erzeugt Exception

    EDIT: Die Ändern-Funktion hat jetzt den Post irgendwie zerschossen -.-

    Hi Leute,
    Mal etwas für die JS-Junkies unter euch. Ich versuche grade mit dem XHR - Objekt auf eine externe API zuzugreifen (CORS ist aktiviert).

    Anm.: Sollte auf der Strg + Umschalft + K Konsole zu reproduzieren sein.

    Ich habe ein klitzekleines Problem mit der open Methode des XMLHttpRequest Objekts. Zunächst erstelle ich mir eine Instanz desselben.

    Code:
    var request;
    
    request = new XMLHttpRequest();
    Um das Objekt überhaupt benutzen zu können initialisiere ich es dann mit der open Methode:

    Code:
    request.open('GET', 'http://ip-api.com/json/google.com');
    Was sage und schreibe gestern noch wunderbar funktioniert hat, liefert mir heute folgende Exception:

    Code:
    [Exception... "<no message>"  nsresult: "0x805e0006 (<unknown>)"  location: "JS frame :: debugger eval code :: <TOP_LEVEL> :: line 1"  data: no]
    Wenn ich den Code vom Script ausführe gibts das ganze sogar als "richtige" Exception:

    Code:
    Exception {
      message: "",
      result: 2153644038,
      name: "",
      filename: "http://localhost/repos/ip-info/js/utils.js",
      lineNumber: 10,
      columnNumber: 0,
      inner: null,
      data: null
    }
    Inhalt besagter Datei (utils.js):

    Code:
    var utils;
    
    utils = {
      getJSON: function(url) {
        return new Promise(function(resolve, reject) {
          var request;
    
          request = new XMLHttpRequest();
    
          request.open('GET', url, true);
          request.responseType = 'json';
    
          request.onload = function() {
            if (request.status === 200) {
              resolve(request.response);
            } else {
              reject('HTTP ' + request.status);
            }
          };
    
          request.onerror = function() {
            reject('network error');
          };
    
          request.send(null);
        });
      }
    };
    Getestet habe ich in Firefox 30 (apt package), Firefox 32 (executable) und Chromium 34 (apt package). In Chromium läufts einwandfrei, beide FFs liefern obiges Ergebnis.
    Das Problem an Javascript:

    Code:
    Array(16).join('hero' - 1) + ' Batman!'


  • #2
    Hi,

    wenn ich deinen Code in der Firefox console ausführe, bekomme ich eine Promise zurück, Fehler sehe ich keinen.
    Wenn du weiterhin eine Exception bekommst, wärs toll, wenn du die Response-Header einfach mal posten könntest.

    Viele Grüße

    Basti
    I like cooking my family and my pets.
    Use commas. Don't be a psycho.
    Blog - CoverflowJS

    Kommentar


    • #3
      Es gäbe übrigens Frameworks (wie jQuery), die lassen diesen Code um einiges schrumpfen und funktionieren auch in allen Browsern. Just as a hint.
      GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

      Kommentar


      • #4
        Wer mit Promises und CORS rumspielt, kennt jQuery..
        I like cooking my family and my pets.
        Use commas. Don't be a psycho.
        Blog - CoverflowJS

        Kommentar


        • #5
          @rudygotya

          Der Request wird ja ar nicht erst abgesendet - ergo gibt es auch keine Antwort, geschweige denn Response Header.

          Ich bin grade unterwegs, ich schau das später wenn ich daheim bin nochmal an.

          Anm.: Bei der getJSON Funktion fehlt natürlich noch ein responseType = 'json'. Bin halt ein Dummerchen.
          Das Problem an Javascript:

          Code:
          Array(16).join('hero' - 1) + ' Batman!'

          Kommentar


          • #6
            @ChristianK

            Mh, jQuery, was ist denn das?

            Nein Spaß beiseite, ich halte es für vernünftig, hin und wieder (v.a. wenn die Größe des Frameworks die der eigentlichen Seite bei weitem übersteigt) auch selbst Code zu schreiben. Zumal das XHR Objekt 2 Ajax so einfach macht.
            Das Problem an Javascript:

            Code:
            Array(16).join('hero' - 1) + ' Batman!'

            Kommentar


            • #7
              Hab das grade nochmal im Firefox mit der obigen url ausprobiert und bekomme jetzt auch die Exception. Request auf google.com funktioniert jedoch => liegt wohl an der Gegenstelle.

              P.S.: der Code oben hat jetzt nach dem Editieren einen Syntaxerror (äußere Klammer der Promise ist weg).
              I like cooking my family and my pets.
              Use commas. Don't be a psycho.
              Blog - CoverflowJS

              Kommentar


              • #8
                Was ich eigentlich seltsam finde ist, das es zuerst funktioniert hat. Bei dir ja auch. Ich teste die Sache nochmal an einer anderen Maschine und versuchs aufzunehmen. Könnte vllt auch für die Mozilla Leute interessant sein.

                @rudygotya Was für eine Version benutzt du? Auf welchem System? (bei mir Firefox 30/Ubuntu 13.10)
                Das Problem an Javascript:

                Code:
                Array(16).join('hero' - 1) + ' Batman!'

                Kommentar


                • #9
                  Nochmal mit jQuery rumgespielt, auch dort das selbe Ergebnis:

                  jsBin
                  Das Problem an Javascript:

                  Code:
                  Array(16).join('hero' - 1) + ' Batman!'

                  Kommentar


                  • #10
                    FF 32.0.3 auf archlinux. War zu faul, aber wenns dich interessiert, schmeiss doch mal wireshark an.
                    I like cooking my family and my pets.
                    Use commas. Don't be a psycho.
                    Blog - CoverflowJS

                    Kommentar


                    • #11
                      Hab mal alle Add-Ons deaktiviert und durch bloßes Trial and Error Adblock als "Übeltäter" entlarvt:



                      Keinen Peil wieso das geblockt wird -.-

                      Wird sich wohl auch kaum (für den Endbenutzer wirksam) entblocken lassen ...
                      Das Problem an Javascript:

                      Code:
                      Array(16).join('hero' - 1) + ' Batman!'

                      Kommentar


                      • #12
                        wow. Die Frage ist dann wohl, ob das beim Request oder erst beim Response blockiert wird. Sollte es beim Request blockiert werden, könntest du das Ganze wrappen und statt direkt auf die API zuzugreifen, auf eine eigene Datei zugreifen, die das serverseitig macht.
                        Crashkurs zum Thema Rechtschreibung: normalerweise (normaler weise oder normaler weiße), Standard (Standart), eben (ebend)

                        Kommentar

                        Lädt...
                        X