【问题标题】:Why does sammy.js never use post route?为什么 sammy.js 从不使用 post 路由?
【发布时间】:2010-10-10 06:52:46
【问题描述】:

好的,所以我刚开始使用 sammy.js,虽然我做得不是很好,但我能够很快掌握基础知识。 我正在使用的 HTML 表单

<form id="contact_form" action="#/form" method="post">
<label for="name">Name:</label><input  class="textbox" type="text" name="name" id="name" />
<label for="email">E-mail:</label><input  class="textbox" type="text" name="email" id="email" />
<label for="message">Message:</label><textarea class="textbox" name="message"  id="message"></textarea>
<button type="submit" name="submit" value="Submit" id="submit" />
<p id="message_outcome"></p>

js 我用来路由我的网址

var app = $.sammy(function(){
    this.element_selector = '#page1';
    this.get('#/about',function(context){
        $("ul#nav li").removeClass("active"); //removes "active" class
        $('#nav_1').addClass("active"); //adds "active" class to the tab that is selected
        $.post('home/about','', function(resp){
            $('#page1').html(resp);
            $('#page_container').cycle(0); //the number of the div that will be shown on click
        });
    });

    this.post('#/form', function(context){
       this.log('Form Submission');

    });
});


$(function(){
    app.run('#/about');
});

当 url 中有 #/form 时,我会得到一个控制台日志,上面写着它的运行路线 get('#/form') .. 有什么想法吗?

这里有一些可能会有所帮助的更多信息

除了 sammy 我正在使用的 Jquery 插件

http://jquery.malsup.com/cycle/

这是我的 chrome 控制台在我单击表单上的提交时所说的内容。 [Sun Oct 10 2010 05:29:27 GMT-0400 (Eastern Daylight Time)] runRoute get #/form /public/js/lib/sammy.js:96 [Sun Oct 10 2010 05:29:27 GMT-0400 (Eastern Daylight Time)] 404 Not Found get #/form Error: 404 Not Found get #/form

【问题讨论】:

    标签: jquery sammy.js


    【解决方案1】:

    关于发布路线要记住的另一件事是了解 sammy 的工作原理。当 Sammy 被初始化时,它被绑定到一个 jQuery 选择器。

    var app = $.sammy('#content', function() {
       ...
    });
    

    对于发布路由,Sammy 绑定到用于初始化应用程序(在我们的示例中为#content)的选择器内的所有表单,并监听表单提交生成的点击事件,因为这些点击事件会冒泡到父级。现在,当它看到表单的提交事件时,如果表单指向一个路由,它将执行相应的路由。

    要记住的是,如果您的表单在主选择器之外(例如,在 #content 之外的标头中),那么 sammy 将永远不会收到提交事件,并且发布路由将永远不会执行。

    【讨论】:

      【解决方案2】:

      这是因为如果您只是在浏览器中输入了一个 URL,那么您正在运行一个 HTTP GET 到“#/form”。触发 POST 的方法是向您提交表单。您想同时设置获取和发布路线。 Get 显示表单和 post 处理提交。

      【讨论】:

        【解决方案3】:

        我最近发现 Sammy.js 捕获来自 app 定义中的一些错误 JavaScript 代码的异常将原始请求交换为具有原始发送 URL 的一些通用 GET。这真的很令人困惑,您所要做的就是调试您的脚本以防止某些函数/方法滥用。当你把所有东西都清理干净后,原来的 POST 就会像魔法一样通过。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-29
          • 2012-08-08
          • 2012-06-09
          • 1970-01-01
          • 2012-12-18
          • 2016-12-23
          • 1970-01-01
          • 2014-01-08
          相关资源
          最近更新 更多