2016-12-01 2 views
0

を表示されない私は(私のログインフォームがモーダルであるため)リロードを防ぐためにjqueryのを使用して、提出フェニックスフォームにいくつかのカスタマイズをした、フォーム:JSフェニックス払い、「put_flash」

<form id="loginForm" role="form"> 
<input type="hidden" name="_csrf_token" value="<%= get_csrf_token() %>"> 
... 

jQueryの

<script> document.getElementById("loginbutton").addEventListener("click", function(event){ 
    event.preventDefault() 
    $.ajax({ 
     url:'/auth/identity/callback', 
     type:'post', 
     data:$('#loginForm').serialize() 

});</script> 

そしてAuthControllerは、メインページを再レンダリングする必要があること、それがコールバックでサイト全体の新しいHTMLを送信しますが、それは実際のサイトに再レンダリングされません。

{:error, reason} ->  
    conn 
    |> put_flash(:error, "Could not authenticate. Error: #{reason}")  
    |> render(Final.PageView, "landingapp.html", current_user: current_user, current_auths: auths(current_user)) 

jquerys preventdefdefault()が理由:エラーフラッシュが表示されませんか?私は何が欠けていますか?

+1

なぜjsonを使用して、ページを再レンダリングするのではなく、それに合わせて変更するのはなぜですか?単に '{" error ":"何らかの理由 "}"を返して、クライアント側でそれを処理して、エラーなどを表示してください – JustMichael

答えて

1

私が言う限り、あなたは基本的にあなたが使いたいメカニズムを壊していると言うことができます。 put_flash関数は、レンダーでアクセスできるflash session scopeにデータを挿入します。しかし、あなたはページを再び読み込まず、あなたはajaxを使っています。 preventDefault()は、ページをリロードしないようにします(これはおそらく必要です)。

あなたはajaxで想定しているように使い、リクエストごとにjsonまたはリロードページとしてのみデータを処理できます。しかし、新しいhtmlを取得して交換するためにajaxを使用しないでください。

jQueryを最初に使用した理由はわかりません。

関連する問題