前提・実現したいこと
Canvasで描いた絵をDjangoのサーバーに送信し、Pythonで画像処理を施すプログラムを実装しています。
描いた絵をJavaScriptでサーバーに送るところでエラーが発生しました。
発生している問題・コンソールに出力されるエラーメッセージ
Safari上のエラーSyntaxError: The string did not match the expected pattern.
Chrome上のエラーSyntaxError: Unexpected token < in JSON at position 2
下のソースコードのError2です。
該当のソースコード
HTML
1<html> 2 <head> 3 <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script> 4 </head> 5 <body> 6 7 <canvas id = "board"></canvas> 8 9 <form action = "{% url 'home' %}" method = "POST"> 10 {% csrf_token %} 11 <button id = "download" type = "submit">実行</button> 12 </form> 13 14 <script> 15 function sendServer(url, param){ 16 fetch(url, param) 17 .then((response)=>{ 18 return response.json(); 19 }) 20 .then((json)=>{ 21 if(json.status){ 22 alert("送信に『成功』しました"); 23 } 24 else{ 25 alert("送信に『失敗』しました"); 26 console.log(`[error1] ${json.result}`); 27 } 28 }) 29 .catch((error)=>{ 30 alert("送信に『失敗』しました"); 31 console.log(`[error2] ${error}`); 32 }); 33 } 34 35 document.getElementById("download").addEventListener("click", function() { 36 37 const csrftoken = Cookies.get('csrftoken'); 38 const canvas = document.getElementById("board").toDataURL("image/png"); 39 40 // 送信情報の設定 41 const param = { 42 method: "POST", 43 headers: { 44 "Content-Type": "application/json; charset=utf-8", 45 "X-CSRFToken": csrftoken, 46 }, 47 body: JSON.stringify(canvas) 48 }; 49 50 // サーバへ送信 51 sendServer("{% url 'home' %}", param); 52 }); 53 54 </script> 55 </body> 56</html>
urls.py
Python
1from django.urls import path 2from . import views 3 4urlpatterns = [ 5 path("", views.index, name = "home") 6]
views.py
Python
1from django.shortcuts import render 2 3def index(request): 4 if request.method == "GET": 5 return render( 6 request, 7 "home.html", 8 ) 9 else: 10 return render( 11 request, 12 "home.html", 13 {"title": 100} 14 ) 15
試したこと
・tokenの有無でデバッグしたので、token関係のエラーではないと思います。
・{% url 'home' %}の部分も大分いじりましたがよくわかりませんでした。
・おそらく関数sendServer内のresponseがバグっているのだと思います。
補足情報
参考にしたサイト
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/28 16:10
2021/03/01 06:45
2021/03/04 04:02 編集