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

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

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

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

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

2回答

1804閲覧

Angular JS Go httpのPOST通信を使ってgo側にデータを渡したい

lkeix_

総合スコア12

Go

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

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

1クリップ

投稿2019/03/02 15:54

実現したいこと

Angular JSのhttpのpost通信でgo側に値を渡したいのです。
テキストボックスに入力してからボタンを押すと通信の処理が行われてテキストボックスの内容がコンソール出力されるというものを作りたいです。
リクエストは受け取っている様ですが、リクエストのデータが取得できていないみたいでそこの部分の解決策について御教授いただきたいです。
コードの階層は以下の様になっています。

workspace/ ├ HTML/ │ ├ index.html │ ├ test.js │ ├ POST/ │ ├ post.go │ ├ Host.go

該当のソースコード

post.go

Go

1func Procreq(w http.ResponseWriter, r *http.Request) { 2 // postのリクエストを処理する 3 fmt.Println("method : " + r.Method) 4 fmt.Println("val :" + r.PostFormValue("val")) 5 // fmt.Printf("%#v", r) 6}

test.js

JavaScript

1var test = angular.module("test",[]) 2 3test.controller("test",function($scope,$http){ 4 $scope.test = function(){ 5 console.log($scope.val); 6 $http({ 7 method: 'POST', 8 url: '../Host.go', 9 data: { name: $scope.val } 10 }).then(function DoneCallback(res){ 11 console.log("通信成功"); 12 console.log(res) 13 },function failCallback(res){ 14 console.log("通信失敗"); 15 }); 16 } 17})

補足情報(FW/ツールのバージョンなど)

AngularJS1.7.5

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/03 05:13

> リクエストは受け取っている様ですが、リクエストのデータが取得できていない なぜこのように思ったのでしょうか? この状況がわかるログを追記して下さい。
lkeix_

2019/03/04 12:10

ボタンを押した時にリクエストが飛ばされるので jsのコンソールは ``` Object config: {method: "POST", transformRequest: Array(1), transformResponse: Array(1), paramSerializer: ƒ, jsonpCallbackParam: "callback", …} data: "" headers: ƒ (d) status: 200 statusText: "OK" xhrStatus: "complete" __proto__: Object ``` の様になっていて リクエストを送った際にコンソール上では以下の様なログが出ます。 ``` string method : POST val : ``` ここのval : の後にテキストボックスの入力値が来る様に実装する予定です。
guest

回答2

0

自己解決

Go 側(post.go)でjson.NewDecoder(r.Body)でdecoderを定義

JSONの受け取るJSONの構造体を作成する

type Test struct { Name string // for test // Val string // Ope string }

decoder.Decode(&test)でPOSTから来るリクエストをtestに格納することができました。

色々と解決策を教えていただきありがとうございました。
教えていただいた方法を試しましたがその方法では解決できなかったので、今回は自己解決とさせていただきます。

投稿2019/03/04 13:26

lkeix_

総合スコア12

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

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

0

application/x-www-form-urlencodedなフォームPOSTを解釈するためには
あらかじめ(*http.Request).ParseForm()を呼び出す必要があります。

GoのPostFormValueはパース済みでない場合はParseMultipartForm()を呼び出す仕組みです。
おそらくこれらのミスマッチが原因なので以下のどちらかを行ってenctypeをマッチさせる必要があります。

  • HTML/JS側で送信タイプを「multipart/form-data」にする
  • Go側をform-urlencodedとしてパースする

前者はJSのFormDataオブジェクトを使うか、formタグにenctype="multipart/form-data"を指定しましょう。
後者はFormValueに触れる前にあらかじめ(*http.Request).ParseForm()を呼び出しておきましょう。

投稿2019/03/04 01:14

編集2019/03/04 01:16
nobonobo

総合スコア3367

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問