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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

1719閲覧

AjaxのPostで送信するdataオプションの格納場所

yammer

総合スコア16

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2022/05/24 03:07

前提

ajaxでデータを送信して、pythonで送信されたデータを取得してファイルに保存したいと考えています。
しかし、postで送信したデータがリクエストのフォームやボディにも存在しておらず、どこからデータを取得すればいいのかわからずに困っています。

実現したいこと

ajaxのdataオプションで指定し送信するJSONデータの受信

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

ajaxのPostで送信されたデータがどこに格納されているのかわからず、データの取得が出来ていません。
vscodeでrequestのbodyやformにはデータが格納されていませんでした。
ただ、Chromeの検証機能のネットワークタブでajaxのPost送信のペイロードを確認すると、想定したデータが送信されていました。
ajaxで送信するデータはどこに格納されているのでしょうか?

該当のソースコード

JavaScript(ajaxの箇所の抜粋)

1 $.ajax({ 2 type: "POST", 3 url: `/save/draw-diagram`, 4 dataType: "json", 5 data: {"diagram" : msg.data} 6 }) 7 .done(function () { 8 console.log("success"); 9 }) 10 .fail(function () { 11 console.log("failed"); 12 });

補足:dataオプションのmsg.dataには文字列が格納されています。

python

1from fastapi import APIRouter, Request 2 3@router.post("/save/draw-diagram", response_class=HTMLResponse) 4def save_diagram(request: Request): 5 try: 6 data = request.body 7 print(data) 8 with open('./test.txt', mode='w') as f: 9 f.write(data)

補足:pythonはFastAPIを使用して、AjaxからのPost

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/24 22:39

質問者さん、無言ですが、回答したのでそれに対するフィードバックをタイムリーに返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
yammer

2022/05/26 12:38

申し訳ありません、アドバイス頂いていたのに返信が出来ておりませんでした。 関数へのasyncの追加とrequest.body()に変更したことで、データを受け取ることができました。
退会済みユーザー

退会済みユーザー

2022/05/26 12:55

> 関数へのasyncの追加とrequest.body()に変更したことで、データを受け取ることができました。 何をしたのか分かりませんが、それは Python 側の話ですか? 回答欄に何をどのようにしたのか具体的に書いて、それにマークをつけてこのスレッドはクローズしていただくようお願いします。
guest

回答2

0

Python には触ったこともないのでハズレかもしれませんが・・・

データを受け取る側はどういう形式でデータが送られてくることを期待しているのでしょう?

質問のコードを見ると、送る側は jQuery.ajax を利用して data オプションに送信するデータを設定しているようですが、例えば以下のようなデータを考えると、

var j = { Id: 5, Name: "日本語" }; // j はオブジェクト var jsonString = JSON.stringify(j); // jsonString は文字列

POST 要求の場合 data に設定するのは:

(a) 受け取る側が application/x-www-form-urlencoded 形式を期待している場合は j 即ち JavaScript オブジェクト、

(b) JSON 文字列を期待している場合は jsonString 即ち JSON 文字列

・・・になるはずです。詳しくは以下の記事を見てください。

jQuery.ajax の data の型
http://surferonwww.info/BlogEngine/post/2015/10/05/what-must-be-set-to-data-option-in-jquery-ajax.aspx

質問のコードの data: {"diagram" : msg.data} は JSON 文字列ではないし JavaScript オブジェクトにも見えませんが、jQuery.ajax は data は JavaScript オブジェクトと解釈して application/x-www-form-urlencoded 形式でデータを送信しているが、受け取る側は JSON 文字列を期待しているということはありませんか?

ハズレでしたらすみません。

投稿2022/05/24 03:33

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yammer

2022/05/26 12:50

回答ありがとうございます。 dataの形式についての言及は、大変参考になりました。
guest

0

fetchでやるとよいでしょう。
type=fileで設定したデータを送る場合と
html上で任意に作成したデータを送る場合は処理がことなります
とくに後者の場合ファイル名の設定やマイムタイプの指定などが必要となります

追記

JSONデータをファイルで送りたいのかと思ったのですが
質問の意図と違いましたかね・・・

javascript

1const data={hoge:[1,2,3],fuga:["a","b","c"]}; 2const filename="test.json"; 3const json = JSON.stringify(data); 4const type = "application/json"; 5const blob=new Blob([json],{type}); 6const method="post"; 7const body=new FormData(); 8body.append("test",blob,filename); 9const url="・・・"; 10fetch(url,{method,body}).then(res=>res.text()).then(console.log);

とすればファイルで送られます

投稿2022/05/24 03:11

編集2022/05/24 03:56
yambejp

総合スコア114968

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

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

yammer

2022/05/26 12:39

今回は、JSONデータを文字列として渡してあげることを考えていましたが、今後はファイルで渡す場合もあると思いますので参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問