2016-05-30 5 views
1

Ich habe ein sehr seltsames Problem hier, dass ich denke, dass etwas mit dem Backbone.js Routing zu tun hat.Wie verhindert man, dass Backbone.js routing (oder Verlauf) automatisch Parameter zur GET-Anfrage hinzufügt?

In unserer mobilen App gibt es einen Login-Bildschirm, der eine AJAX-Post-Anfrage (mit jQuery) ausführt, die gegen eine API läuft. Benutzername, Passwort und ein dritter Parameter befinden sich im POST-Body. Das funktioniert wie ein Zauber.

Das seltsame Verhalten tritt ein, nachdem Backbone.js beginnt, einige Routing zu tun. Nach dem Umleiten des Browsers werden (nur!) Der Benutzername und das Passwort als Parameterliste an die GET-Anfrage gesendet.

So ist die Anfrage also

http://localhost:3000/#login 

aus unbekanntem Grund wird

http://localhost:3000/?username=myuser&password=mypassword#login 

Bitte beachten Sie, dass die neuen Parameter in der GET-Anfrage noch nicht zu 100% Teil des POST-Körper, weil Der savePassword-Parameter fehlt. Beachten Sie auch, dass die Login-Anfrage gegen die API geht, (/ api/user/login), nicht die Route des Login-Bildschirms (/ # login)

Ich habe schon eine Menge Dinge ausprobiert, nehme auch an alle Backbone-Quellcode auseinander, aber immer noch nicht finden, wie man dieses Verhalten verhindert.

Noch ein Hinweis: Ich sehe das nur auf Handy, also im UIWebView auf iOS und im WebView-Objekt auf Android. Vielleicht hängt dieses Problem auch mit dem Handy zusammen ...

Ich bin sehr glücklich für jede Hilfe, Antworten oder Hinweise, wie Sie dieses Verhalten deaktivieren und den Benutzernamen/das Passwort aus dieser freakin URL erhalten.

Edited: Dies ist die AJAX-Request für loggin in

login: function(username, password, savePassword, successcallback, errorcallback) { 
    $.ajax({ 
     method: 'POST', 
     dataType: 'json', 
     url: config.api_base_url + 'user/login', 
     data: { 
      username: username, 
      password: password, 
      savePassword: savePassword 
     }, 
     success: function(data, response, xhr) { 
      app.auth_token = xhr.getResponseHeader('Authtoken'); 
      $.cookie('auth_token', app.auth_token); 
      if (successcallback) { 
       successcallback(); 
      } 
     }, 
     error: function(data) { 
      if (errorcallback) { 
       errorcallback(data); 
      } 
     } 
    }); 
} 
+0

Können Sie die AJAX-Post-Request zeigen (mit jQuery)? –

+0

Bearbeitete die Frage mit dem Ajax-Code. – nodepond

+0

als eine andere Option können Sie jQuery.post() verwenden https://api.jquery.com/jquery.post/ –

Antwort

0

Nach jQuery.ajax() docs.

Daten

Typ: PlainObject oder String oder Array

Daten, die an den Server gesendet werden. Es wird in eine Abfragezeichenfolge konvertiert, wenn nicht bereits eine Zeichenfolge ist. Es wird an die URL für GET-Anfragen angehängt. Siehe ProcessData-Option, um diese automatische Verarbeitung zu verhindern. Objekt muss Key/Value-Paare sein. Wenn der Wert ein Array ist, serialisiert jQuery mehrere Werte mit demselben Schlüssel basierend auf dem Wert der traditionellen Einstellung (unten beschrieben).

Und als, sollten Sie in Ihren Einstellungen processData gleich falsch hinzu:

verarbeite (Standard: true)

Typ: Boolean

standardmäßig übergebenen Daten in der Datenoption als ein Objekt (technisch, alles andere als eine Zeichenfolge) wird verarbeitet und in umgewandelt werden eine Abfragezeichenfolge, passend zum Standardinhaltstyp "application/x-www-form-urlencoded". Wenn Sie ein DOMDocument oder andere nicht verarbeitete Daten senden möchten, setzen Sie diese Option auf false.

-Code jQuery.ajax():

login: function(username, password, savePassword, successcallback, errorcallback) { 
    $.ajax({ 
     method: 'POST', 
     dataType: 'json', 
     url: config.api_base_url + 'user/login', 
     data: { 
      username: username, 
      password: password, 
      savePassword: savePassword 
     }, 
     processData: false, 
     success: function(data, response, xhr) { 
      app.auth_token = xhr.getResponseHeader('Authtoken'); 
      $.cookie('auth_token', app.auth_token); 
      if (successcallback) { 
       successcallback(); 
      } 
     }, 
     error: function(data) { 
      if (errorcallback) { 
       errorcallback(data); 
      } 
     } 
    }); 
} 
+0

Vielen Dank für das hinweisend. Hat mich dazu gebracht, jQuery ein bisschen besser zu verstehen. Aber leider hat das meine Probleme nicht gelöst. Aber ich komme näher, scheint, dass jede Anfrage nach dem Login als Formular-Submit-Request interpretiert wird (ich vermute durch ein internes Routing). Und dann setzt diese Namens-Magie aus den Eingabefeldern die Parameter in die URL. http://www.w3schools.com/tags/att_form_method.asp – nodepond

+0

Dieses spezielle Beispiel ist eine Form mit 'method =" get "' .. Sie sollten 'method =" post "' statt –

+0

verwenden wir eine Ajax- POST in der Einreichung des Formulars mit JavaScript. Aber ich vermute, dass nachfolgende Anfragen, die durch das Routing ausgelöst werden, als Formular-Submit-Anfragen interpretiert werden, und dies scheint zu sein, wo das GET ins Spiel kommt. – nodepond

Verwandte Themen