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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1223閲覧

フロントエンドからバックエンドに値を送る時に、文字列の最後の半角スペースが省略されてしまう

j.f15

総合スコア23

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/26 11:18

編集2021/07/26 11:36

前提・実現したいこと

フロントエンドからバックエンドに値を送る時に、その値の文字列が省略されず正常な値を送りたい。

発生している問題・エラーメッセージ

フロントエンドで値を確認時は文字列内の半角スペースが省略されず正常な値が確認できました。
しかし、バックエンドで確認時は文字列内の半角スペースが省略されてしまっていました。

該当のソースコード

・CellDataCalcCreate.js

javascript

1calcService.calcFileUpdate(company_cd, 2 company_name, 3 project_cd, 4 calc_file_no, 5 user_id, 6 user_name, 7 calculation_file_name, 8 annotation_ver, 9 remarks, 10 confirmed_flag, 11 update_date, 12 detailData, 13 file_size, 14 ).then((response) => { 15 //以下省略 16 });

・calculation.service.js

javascript

1const calcFileUpdate = async ( 2 company_cd, 3 company_name, 4 project_cd, 5 calc_file_no, 6 user_id, 7 user_name, 8 calc_file_name, 9 annotation_version, 10 remarks, 11 confirmed_flag, 12 update_date, 13 calc_parameter, 14 file_size, 15) => { 16 // calc_parameter = JSON.stringify(calc_parameter); 17 // const formData = new FormData(); 18 // const params = new URLSearchParams() 19 // formData.append('company_cd', company_cd); 20 // formData.append('company_name', company_name); 21 // formData.append('project_cd', project_cd); 22 // formData.append('calc_file_no', calc_file_no); 23 // formData.append('user_id', user_id); 24 // formData.append('user_name', user_name); 25 // formData.append('calc_file_name', calc_file_name); 26 // formData.append('annotation_version', annotation_version); 27 // formData.append('remarks', remarks); 28 // formData.append('confirmed_flag', confirmed_flag); 29 // formData.append('update_date', update_date); 30 // formData.append('calc_parameter', calc_parameter); 31 // formData.append('file_size', file_size); 32 33 return await axios.post(API_URL + 'fileupdate', { 34 // formData, 35 // params, 36 company_cd, 37 company_name, 38 project_cd, 39 calc_file_no, 40 user_id, 41 user_name, 42 calc_file_name, 43 annotation_version, 44 remarks, 45 confirmed_flag, 46 update_date, 47 calc_parameter, 48 file_size, 49 }) 50 .then((response) => { 51 if (response.data.success) { 52 console.log(response); 53 } 54 return response; 55 }); 56};

・CellCalcController.php

php

1/** 2 * 細胞計算ファイルパラメータ更新API 3 * @param Request $request 4 * @param CellCalcExclusiveCheckService $exclusiveCheckService 5 * @param DuplicateCalcCheckService $duplicateCalcCheckService 6 * @param CellCalcQueryService $cellCalcQueryService 7 * @param CellCalcFileService $cellCalcFileService 8 * @return \Illuminate\Http\JsonResponse 9 */ 10 public function fileUpdate(Request $request, CellCalcExclusiveCheckService $exclusiveCheckService, 11 DuplicateCalcCheckService $duplicateCalcCheckService, 12 CellCalcQueryService $cellCalcQueryService, 13 CellCalcFileService $cellCalcFileService, 14 CompanyStorageCapacityCheckService $companyStorageCapacityCheckService) 15 { 16 $company = CompanyM::createFill($request->all()); 17 $user = UserM::createFill($request->all()); 18 $cell_calc = CellGroupCalcHeader::createFill($request->all()); 19 $csv_data = $cellCalcFileService->convertJSONToCSV($request->get('calc_parameter')); 20 Log::debug($request); 21 22 //以下省略 23 }

・フロントエンドの一部ログ(エラーの箇所はインデックスの0番目の値です)
イメージ説明

・バックエンドの一部ログ(こちらもarrayの0番目の値です)
イメージ説明

一応ログを見る通り、全角スペースの場合は省略されていません。

試したこと

ソースコードのコメントでも残してあるように、FormData()、URLSearchParams() といった情報もあったので試してみましたが
バックエンドで想定している値の形では無かったりと上手く確認することができませんでした。

axios.post周りが怪しいのかなとは思いつつも、自分だけでは解決することが出来ない状態でして、
どなたか未熟な自分にご教示をお願いしたいです。

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

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

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

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

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

takasima20

2021/07/26 12:15

よくわかりませんが、送信時の method は POST なんスかね? GET だと encode / decode がいりそうな?
j.f15

2021/07/26 14:02

はい。今回のケースではメソッドは POST の処理を行っています。
guest

回答1

0

ベストアンサー

fetchでテストしてみて下さい

//sample.html

javascript

1const calcFileUpdate = async (a,b,c)=>{ 2 const body=new FormData(); 3 body.append("aaa",a); 4 body.append("bbb",b); 5 body.append("ccc",c); 6 return await fetch("sample.php",{method:"post",body}).then(res=>res.text()); 7}; 8(async()=>{ 9 const res=await calcFileUpdate(1,2,3); 10 console.log(res); 11})();

※調整版
//sample.php

PHP

1<?PHP 2var_dump($_POST);

投稿2021/07/26 12:03

編集2021/07/27 01:37
yambejp

総合スコア116738

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

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

j.f15

2021/07/26 14:01

回答ありがとうございます。 今すぐには確認できないのですが確認でき次第、返信させていただきたいと思います。
j.f15

2021/07/27 00:59

頂いた情報を元にこのようなコードを試してみたのですが何か間違いとかありますでしょうか? この状態で実行するとバックエンド側に値が送られていないのか、バックエンド側のログが表示されていません。fetchの記述等は間違ってはいないとは思っているのですが何か分かれば教えて頂きたいです。 ```javascript const calcFileUpdate = async ( company_cd, company_name, project_cd, calc_file_no, user_id, user_name, calc_file_name, annotation_version, remarks, confirmed_flag, update_date, calc_parameter, file_size, ) => { const formData = new FormData(); formData.append('company_cd', company_cd); formData.append('company_name', company_name); formData.append('project_cd', project_cd); formData.append('calc_file_no', calc_file_no); formData.append('user_id', user_id); formData.append('user_name', user_name); formData.append('calc_file_name', calc_file_name); formData.append('annotation_version', annotation_version); formData.append('remarks', remarks); formData.append('confirmed_flag', confirmed_flag); formData.append('update_date', update_date); formData.append('calc_parameter', calc_parameter); formData.append('file_size', file_size); console.log("111111111"); return await fetch(API_URL + 'fileupdate',{method:"post",body:formData}) .then((response) => { console.log(response); if (response.ok) { } return response; }); }; ``` ※他のコード部分はいじっておりません。
yambejp

2021/07/27 01:06 編集

fetchの戻り値は一旦text()やjson()で適正な型に変更して下さい (回答に記述してあるとおりです) またテストするならもっと引数を絞ってデバッグして下さい
j.f15

2021/07/27 02:30 編集

```javascript const formData = new FormData(); formData.append('calc_parameter', calc_parameter); formData.append('file_size', file_size); console.log("111111111"); return await fetch(API_URL + 'filecreate', { method: "post", body: formData }) .then((response) => { console.log(response); response.json(); }) .then((json) => { console.log(json); }); ``` テストの値を絞って、fetchの戻り値をjson指定にした記述をしてみたのですが何か記述等で間違いはないでしょうか? この記述でも変わらずバックエンド側には処理が到達していませんでした。
yambejp

2021/07/27 01:30

response.json()をreturnしてやる必要があります
yambejp

2021/07/27 01:38

回答のsample.htmlを修正してあります。 再度仕様をよく確認して下さい
j.f15

2021/07/27 02:36

本当に申し訳ございません。 色々と調査していたのですが、バックで要求しているURLとは別のURL名になってしまっていたのが原因でバックまで値が送られていませんでした。(おそらくfetchを使う形に色々と処理を書いている内に間違えてしまっていたようです...) 最終的にaxios.postのような形で記述していた箇所をfetchを利用する形でバックエンドにPOSTした値を確認した所、無事に半角スペースは省略されていませんでした。 yambejpさん お時間を取ってしまい申し訳ございませんでした。それと解決方法の提示、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問