2

簡単なクライアント側のルーティングに Sammy を使用するアプリケーションがあります。

ページの 1 つに「PDF のダウンロード」ボタンがあり、PDF ドキュメントを取得してダウンロードするために POST を実行する必要があります (非常に落ち着いていないことはわかっていますが、大量のデータがあるため、POST である必要があります)。提出)。これは、<form>要素を動的に作成、入力、および送信するという古いトリックを使用して行われます。

ルートが見つからないというサミーからのエラーがコンソールに表示されることを除いて、すべて正常に動作します。これはルートではなく、Sammy が処理すべき動詞でさえないことに注意してください。

これが私の縮小されたテストケースです

Sammy(function initializeClientRouting(app) {
  app.get('#/', show('#default'));
  app.get('#/test', show('#test'));

  function show(selector) { return function() {
    $('section').slideUp();
    $(selector).slideDown();
  }; }
}).run('#/');

$('button').click(function() {
  var form = $("<form method=post action: 'http://www.google.com'>").hide();
  $('<textarea name=q>').text("search text").appendTo(form);
  form.appendTo('body').submit().remove();
});

このエラーを防ぐ方法を知っている人はいますか? これはサミーのバグですか?

4

1 に答える 1

1

これは、サミーと JQuery の動作 (バグ?) の組み合わせです。あなたがそれを置く方法で動的に生成されると、フォームタグは次のようにレンダリングされます

 <form www.google.com'="" 'http:="" action:="" method="post">

これは、おそらく次のような現在のページに POST しようとします

http://blah/# or http://blah/#/test

なんらかの理由で、ハッシュタグが原因で Sammy がトリガーされ、構成された POST が見つからず、エラーがログに記録されます。

あなたの例をいじって、私にとってうまくいったのは:

    var form = $("<form>");
    form.attr('method', 'post');
    form.attr('action', 'http://www.google.com');
    $('<textarea name=q>').text("search text").appendTo(form);
    form.appendTo('body').submit().remove();

これにより、適切な HTML が生成され、Sammy エラーが除去されたようです。

于 2013-05-06T16:43:40.713 に答える