質問させてください。
今 Javascript のFetch
について勉強しているのですが、こちらのサイトを参考にして、ユーザが canvas に描いた画像をサーバーに送信するというコードを試しました。
html
1<canvas class="canvas" width="100" height="80" style="border:1px solid"></canvas> 2<input class="btn" type="button" value="Submit">
Javascript
1const canvas = document.querySelector('.canvas'); 2const btn = document.querySelector('.btn'); 3 4canvas.onmousemove = function(e) { 5 let ctx = canvas.getContext('2d'); 6 ctx.lineTo(e.clientX, e.clientY); 7 ctx.stroke(); 8} 9 10function submit() { 11 canvas.toBlob(function(blob) { // HTMLCanvasElement.toBlob(callback) → キャンパスに描画したグラフィックをBlobに変換。返り値はなく、結果は第1引数に指定したコールバック関数に渡される 12 // console.log(blob); // => Blob { size: 608, type: "image/png" } 13 fetch('/image', { 14 method: 'POST', 15 body: blob 16 }) 17 .then(res => res.json()) // ←ここをコメントアウトするとエラーが出ませんでした 18 .then(result => alert(JSON.stringify(result, null, 2))) 19 }, 'image/png'); 20} 21 22btn.addEventListener('click', () => { 23 submit(); 24});
しかしローカルサーバーで実行したところ
Uncaught (in promise) SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
というエラーが出てしまい、画像がうまく送れません。
試しに.then(res => res.json())
の部分をコメントアウトしてみるとエラーが出なかったので、Response オブジェクトから JSON を抽出するところに原因がありそうなのですが、解決方法が全く分からず困っております。
どなたか詳しい方がいらっしゃいましたらご教授いただけると助かります。
よろしくお願いいたします。
■ 開発環境
CentOS 7.6
vagrant 2.2.10
Firefox
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 09:54
2020/09/16 14:43 編集
2020/09/17 08:48