Sammy截获的POST不是添加的路线之一

时间:2013-04-26 18:51:37

标签: sammy.js

我有一个使用Sammy进行简单客户端路由的应用程序。

其中一个页面有一个“下载Pdf”按钮,需要执行POST来获取和下载pdf文档(我知道,不是非常重要,但由于数据量很大,它必须是POST我正在提交)。它使用动态创建,填充和提交<form>元素的旧技巧来实现此目的。

一切正常,除了我可以在控制台中看到一个错误来自sammy我找不到路线。请注意,这不是一条路线,甚至不是Sammy应该处理的动词。

Here is my reduced test case

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();
});

有谁知道如何防止此错误?这是Sammy的错误吗?

1 个答案:

答案 0 :(得分:1)

这是sammy&amp; amp; JQuery行为(bug?)。当您按照放置它的方式动态生成时,表单标记将呈现为

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

这将尝试POST到当前页面,这可能类似于

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

出于某种原因,Sammy将因为hashtag被触发,没有找到配置的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错误。