2016-05-30 5 views
1

ここでは非常に奇妙な問題があります。私はBackbone.jsルーティングと関係があると思います。Backbone.jsルーティング(または履歴)が自動的にGET要求にパラメータを追加するのを防ぐには?

私たちのモバイルアプリケーションには、APIに対して実行されるAJAX-Post-Request(jQuery付き)を実行するログイン画面があります。ユーザー名、パスワード、および第3パラメーターはPOST本体にあります。これは魅力のように機能します。

Backbone.jsがルーティングを開始した後、奇妙な動作が発生します。ブラウザをリダイレクトした後、(!のみ)ユーザ名とパスワードは、GETリクエストのパラメータリストとして送信されます。

だから、未知の理由のため

http://localhost:3000/#login 

すなわち要求がGET要求の新しいパラメータがあるため、POST-体の100%の一部ではないことを、

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

は注意してくださいになりsavePasswordパラメータがありません。ログイン画面(/#ログイン)の経路ではなく、API(/ api/user/login)に対抗することにも注意してください。

私はすでにたくさんのことを試しています。すべてのバックボーン - ソースコードは離れていますが、この動作を防ぐ方法はまだ見つかりません。

別の通知:これはモバイルでのみ表示されるため、iOSのUIWebViewとAndroidのWebViewオブジェクトに表示されます。おそらく、この問題はモバイルにも関係しています...

この動作を無効にし、このフリークインURLからユーザー名/パスワードを取得する方法については、何か助け、回答またはヒント、非常にうれしいです。

編集: これはでlogginための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 
     }, 
     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

あなたは(jQueryを使って)AJAXポストリクエストを表示することができますか? –

+0

ajaxコードで質問を編集しました。別のオプションとして – nodepond

+0

を使用すると、jQuery.post()を使用できます。https://api.jquery.com/jquery.post/ –

答えて

0

jQuery.ajax()ドキュメントによれば:

データ

型:PlainObjectまたは文字列または配列

サーバーに送信するデータ。 がまだ文字列でない場合は、クエリ文字列に変換されます。これはGETリクエストのURLに追加されています。この自動処理を防止するには、 processDataオプションを参照してください。オブジェクトは キー/値のペアでなければなりません。値が配列の場合、jQueryは、従来の設定 (以下で説明します)の値に基づいて、同じキーを持つ複数の 値をシリアル化します。あなたの設定はfalseに等しいprocessDataに追加する必要があります

よりも、:

PROCESSDATA(デフォルト:真)

型:Boolean

デフォルトでは、渡されたデータオブジェクトとしてデータオプションに入力すると、 (技術的には文字列以外のもの)が処理され、 に変換されますデフォルトのコンテンツタイプ「 」に適合するクエリ文字列「application/x-www-form-urlencoded」 DOMDocumentまたはその他の未処理データを送信する場合は、このオプションをfalseに設定します。

コード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

ありがとうございます。私はjQueryをちょっと理解してくれました。しかし残念ながら、これは私の問題を解決しませんでした。しかし、私は近いうちに、ログイン後のすべてのリクエストがフォーム提出リクエスト(私はいくつかの内部ルーティングによって推測される)として解釈されるようになっています。そして、入力フィールドからのこの名前 - 魔法は、URLにパラメータを入れています。 http://www.w3schools.com/tags/att_form_method.asp – nodepond

+0

具体的な例は、 'method =" get "'という形式のものです。代わりに 'method =" post "'を使用してください。 –

+0

ajax- JavaScriptを使用したフォームの送信時にPOSTを使用します。しかし、私の推測では、ルーティングによって引き起こされる後続の要求は、フォーム提出要求として解釈され、これはGETが出現する場所と思われます。 – nodepond

関連する問題