4

我很确定这与我的 core.js 文件和 ajax 哈希 URL 有关。但我正在尝试提交一个表单,但它并没有像我想要的那样提交。这是 core.js 文件:

// call init
$(init);


function init() {
    ajax_page_handler();
    page_load($(window.location).attr("hash")); // goto first page if #! is available
}

function page_load($href) {
    if($href != undefined && $href.substring(0, 2) == '#/') {
        // replace body the #content with loaded html
        $('#content').load($href.substring(2), function () {
            $('#content').hide().fadeIn('slow');
        });
    }
}

function ajax_page_handler() {
    $(window).bind('hashchange', function () {
        $href = $(window.location).attr("hash");
        page_load($href);
    });

    // this allow you to reload by clicking the same link
    $('a[href^="#/"]').live('click', function() {
        $curhref = $(window.location).attr("hash");
        $href = $(this).attr('href');
        if($curhref == $href) {
            page_load($href);
        }
    });
}

现场观看结束于 www.krissales.com。表格在这里:http ://www.krissales.com/#/media/5.Testing-1

点击链接“发表评论”,然后您将输入信息,然后点击评论,但它只是刷新,但没有提交。

我为解决它而采取的步骤是在评论文件中,在表单操作字段中,我插入了标签name="#content"只是因为那是我要提交的 div 的名称。

原始内容位于http://blog.krissales.com/article/7.Testing-3-man(您实际上可以在其中发表评论,它会起作用)

但显然它不起作用。你们知道我做错了什么吗?提前感谢您的帮助!

<script type="text/javascript">
    tinyMCE.init({
        mode : "textareas",
        theme : "simple"
    });
</script>
<form action="#/media/article.php" name="#content" method="POST">

    Name:
    <br />
    <input type="text" name="name" class="userpass"/>
    <br /><br />
    Comment:
    <br />
    <textarea id="elm1" name="comment" rows="7" cols="30" style="width: 500px;"> 
    </textarea>
    <br />
    <input type="submit" name="submit" value="Comment" class="button" />
    <input type="reset" name="submit" value="Reset" class="button" />

</form> 
4

4 回答 4

1

我注意到您没有在文件“comment.php”上设置 ajax 类型。

你需要...

 $.ajax({
            type: 'POST',
        url: 'comment_ajax.php',
        data: { form_name: name, form_comment: comment },
        success: function(data) {
            $('#new_comment').prepend(data);
                        // close modal box
            // do other shit
            // kthnxbai
        }
    });

如果未指定类型,则默认为不会发布数据的 GET 请求。:)

于 2012-11-20T19:13:29.753 回答
0

您应该像这样更改表单的 action 属性:

<form action="script-handling-comment-data.php#/media/article.php" name="#content" method="POST">

目前,您将评论数据发送到http://www.krissales.com/,我认为主页不处理评论发布。

于 2012-11-17T12:09:04.540 回答
0

您似乎正在正确处理链接,但表单提交不是链接,您可能希望使用$(form).submit(function(){ ... })

在你的情况下,如果你给你的表格 idform1

$('#form1').submit(function(){
  var keyValues = $(this).serializeArray();
  var map = {};
  for(i in keyValues)
  {
    var value = keyValues.value;
    var name = keyValues.name;
    map[name] = value;
  }
  $.post($(this).attr('action'),map,function(){
    alert("Submitted values: " + $(this).serialize());
  });
  return false;
})

请参阅serializeArray$.post了解.submit更多信息

于 2012-11-22T12:08:01.630 回答
0

您当前的 core.js 处理 URL 哈希中的更改,并重新路由带有哈希的任何链接以将该相对路径加载到#content. 缺少的是重定向表单提交以执行相同操作的代码(将其添加到ajax_page_handler):

 $('form').live('submit', function(e) {
    var $action = $(this).attr('action');

    if($action.substring(0, 2) == '#/') {
        // replace the #content with result of the form post
        $.ajax({
            url: $action.substring(2),
            type: $(this).attr('method'),
            data: $(this).serialize(),
            success: function(data) {
                $('#content').html(data);
                $('#content').hide().fadeIn('slow');
            }
        });
        // stop the real form submit from happening
        e.preventDefault();
    }
});
于 2012-11-23T20:03:59.010 回答