1

私は p5.js を使用して、Django バックエンドから供給された json からのデータを使用して描画を行っています。次のように、スクリプト要素のhtmlドキュメントのベースレベルで定義された描画関数があります。

function draw(json) {

  if (json["leaf_text"]) {
    stroke(100)
    ellipse(json["leaf_center_x"], json["leaf_center_y"], json["leaf_height"], json["leaf_width"]).rotate(json["leaf_rotate"]);
  }
  if (json["twig_text"]) {
    stroke(100);
    console.log("drawing twig....");
    line(json["twig_base_x"], json["twig_base_y"], json["twig_tip_x"], json["twig_tip_y"]);
  }
  if (json["branch_text"]) {
    stroke(150);
    line(json["branch_base_x"], json["branch_base_y"], json["branch_tip_x"], json["branch_tip_y"]);
    console.log("x1 " + json["branch_base_x"]);
    console.log("x2 " + json["branch_base_y"]);
    console.log("y1 " + json["branch_tip_x"]);
    console.log("y2 " + json["branch_tip_y"]);

  }
  if (json["trunk_text"]) {
    stroke(255);
    line(json["trunk_base_x"], json["trunk_base_y"], json["trunk_tip_x"], json["trunk_tip_y"]);
  }
}

この関数は、次のように成功した ajax 応答を受信すると呼び出されます。私の問題は、描画機能が原因で js コンソールにエラーが表示されることです。

TypeError: json is undefined

私の理解では、(間違っているところを修正してください)「draw」関数は「json」が存在するかどうかにとらわれず、渡されるオブジェクトの種類を待ってから、パラメータが定義されていません。これはJavaScriptの関数の考え方ではないでしょうか?? 私は何かが欠けているに違いない。この場合、json が定義されていないと不平を言うのはなぜですか?

if (json["leaf_text"]) {
  $("#grow").click(
    function(e) {
      console.log("attempting ajax...");
      e.preventDefault();
      var csrftoken = getCookie('csrftoken');
      var open_parens = ($("#txt").val()).indexOf("(");
      var close_parens = ($("#txt").val()).indexOf(")");
      var child = $("#txt").val().slice(0, open_parens);
      var parent = $("#txt").val().slice(open_parens + 1, close_parens);

      $.ajax({
          url: window.location.href,
          type: "POST",
          data: {
            csrfmiddlewaretoken: csrftoken,
            child: child,
            parent: parent,
            mode: "grow"
          },
          success: function(json) {
            setup();
            draw(json);
            ...
          }
        },
        error: function(xhr, errmsg, err) {
          console.log(xhr.status + ": " + xhr.responseText);
        }

      });
  });
4

1 に答える 1

0

json という名前のインポートを使用する場合は、描画関数のパラメーターとして別の名前を使用する必要があります (例: draw(json_bar)) か、インポートで json の名前を変更します (例: json を json_foo としてインポートします)。

于 2016-01-24T22:32:27.350 に答える