2

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

其中一个页面有一个“Download Pdf”按钮,它需要做一个 POST 来获取和下载一个 pdf 文档(不是很放松,我知道,但由于我的数据量很大,它必须是一个 POST提交)。它使用动态创建、填充和提交<form>元素的旧技巧来做到这一点。

一切正常,除了我可以在控制台中看到来自 sammy 的错误,即找不到我的路线。请注意,这不是一条路线,甚至不是 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();
});

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

4

1 回答 1

1

这是 sammy 和 JQuery 行为的组合(错误?)。当以您放置它的方式动态生成时,表单标签将呈现为

 <form www.google.com'="" 'http:="" action:="" method="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 回答