【问题标题】:Sammy intercepts a POST that is not one of the added routesSammy 拦截了不是添加的路由之一的 POST
【发布时间】:2013-05-07 00:43:40
【问题描述】:

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

其中一个页面有一个“Download 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 的错误吗?

【问题讨论】:

标签: sammy.js


【解决方案1】:

这是 sammy 和 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 错误。

【讨论】:

  • 抱歉,your code 并没有消除 sammy 错误。此外,here is a cleaned up version 生成了绝对正确的 html(需要 chrome)。还是一个错误。错误肯定在 sammy 之内
猜你喜欢
  • 1970-01-01
  • 2015-10-11
  • 2022-01-13
  • 1970-01-01
  • 2011-11-22
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
相关资源
最近更新 更多