質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

2回答

523閲覧

Go - フォームから送信されたJSONを受け取った後に指定のページに遷移したい。

uk_63

総合スコア29

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2019/03/10 10:49

編集2019/03/10 10:50

はじめに

質問を読んでくださりありがとうございます。
Go言語でCRUDアクションのWeb Applicationを作っています。
ブラウザのフォームからJSONで送信してバックエンドのGOで受け取り構造体にマッピングした処理をした後、別ページへ遷移させたいのですが、うまくいきません。

エラー内容

http.Redirectを使ってページを指定のページへ遷移させようとしていますが、URL変わらず同じページがリダイレクトされるだけです。エラーハンドリングは出来ていません。

期待する処理

POSTしたあとに自動的に指定するURLへ遷移してほしいです。

コード

go

1type Sample struct { 2 Name string 3 Age int 4}

go

1 2func Create(w http.ResponseWriter, r *http.Request) { 3 // init 4 var f Sample 5 // json to struct 6 err := json.NewDecoder(r.Body).Decode(&f) 7 if err != nil { 8 log.Fatalln(err) 9 } 10 fmt.Println(f) 11 http.Redirect(w, r, "http://localhost:8080/sample/", 301) 12} 13 14func main() { 15 mux := http.NewServeMux() 16 // 下記で js, css を読み込ませる。 17 files := http.FileServer(http.Dir("assets")) 18 mux.Handle("/static/", http.StripPrefix("/static/", files)) 19 20 // このURLへ遷移させたい。 21 mux.HandleFunc("/sample/", Show) 22 // Formはここから送信されます。 23 mux.HandleFunc("/sample/new", New) 24 // JSでバックエンドでこのURLのリクエストしています。 25 mux.HandleFunc("/sample/create", Create) 26 server := http.Server{ 27 Addr: fmt.Sprintf("127.0.0.1:%v", config.Config.Port), 28 Handler: mux, 29 } 30 err := server.ListenAndServe() 31 if err != nil { 32 log.Fatalln(err) 33 } 34}

フォームをJSで送信しています。
/sample/new/のページからJSで/sample/create/のリクエストを送ります。
Createの処理が最後まで行けば指定のページ先へ遷移するはずがしません。
リダイレクトの処理以外はうまく行われています。

js

1$(function () { 2 function FormSend (e) { 3 e.preventDefault(); 4 $("#Form").on('submit', function () { 5 $("#Form").attr("disable", true); 6 let data = { 7 name: $("#Name").val(), 8 age: $("#Age").val() 9 }; 10 $.ajax({ 11 method: 'post', 12 url: '/sample/create', 13 data:JSON.stringify(data), 14 dataType: 'json', 15 contentType: "application/json", 16 timeout: 10000, 17 }) 18 .done((data) => { 19 console.log(data); 20 }) 21 .fail((error) => { 22 console.error(error); 23 }) 24 .always(() => { 25 $("#Form").attr("disable", false); 26 }); 27 }); 28 } 29 FormSend(); 30 return false 31}); 32

お願いしたいこと

エラーハンドリングが出来ていないためになぜページ遷移しないか原因がよくわかっていません。なので、WebAppdがブラウザのフォームからJSON POSTを受け取った後に指定のページへ遷移する方法を教えていただきたいです。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

現状jQueryを使って非同期通信しているのでページ遷移できないのかと。
Goで遷移したいのなら $.ajax は使わず <form> のPOSTをする必要があると思います。

投稿2019/03/11 02:19

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/11 02:27

サーバーサイド側でリダイレクトする必要がないのならjQueryで遷移させてしまう手もあるかと。 https://uxmilk.jp/41457
guest

0

ベストアンサー

上の方も仰っている通りフロント側で遷移させるのが良いかと思います。
フォームデータの送信が終了した時の処理に遷移処理を書けば送信後に遷移できると思います。

JavaScript

1$(function () { 2 function FormSend (e) { 3 e.preventDefault(); 4 $("#Form").on('submit', function () { 5 $("#Form").attr("disable", true); 6 let data = { 7 name: $("#Name").val(), 8 age: $("#Age").val() 9 }; 10 $.ajax({ 11 method: 'post', 12 url: '/sample/create', 13 data:JSON.stringify(data), 14 dataType: 'json', 15 contentType: "application/json", 16 timeout: 10000, 17 }) 18 .done((data) => { 19 console.log(data); 20 // ここに遷移するためのコード 21 }) 22 .fail((error) => { 23 console.error(error); 24 }) 25 .always(() => { 26 $("#Form").attr("disable", false); 27 }); 28 }); 29 } 30 FormSend(); 31 return false 32});

投稿2019/03/11 04:22

teikoku-penguin

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問