0

我正在使用 ajax 提交一个 html 输入表单并在完成后重定向输出页面。我尝试了两种方法,但不确定为什么它们的结果不同。

HTML 表单是这样的:

<form id="output_post" method="post" action="output.html">
    <table class="input"></table>
</form>

方法一:

    var frm = $('#output_post');
    frm.submit()
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        success: function (url) {
            window.location = "/output.html"
        }
    });

方法二:

    var frm = $('#output_post');
    $.ajax({
        type: "POST",
        url: frm.attr('action'),
        success: function(url) {
            window.location = "/output.html"
        }

    });

方法 1 按我的预期工作,但我在方法 2 中收到错误消息405 Method Not Allowed The method GET is not allowed for this resource.方法 1 和 2 之间的区别是frm.submit(),我非常确定这两种方法都已成功启动计算。

谁能给我一些关于这个问题的提示?谢谢!

4

2 回答 2

2

首先,我实际上.submit()会说更好地保留以允许浏览器实际继续进行自然/缩进的行为,以遵循action=""- 如果你想真正获得不同的“最终结果” - 这就是需要$.submit()帮助的地方。

/**
 *   $.submit will listen to
 *   the .submit event, preventing
 *   default and allowing us to mimic
 *   the submission process and have our
 *   bespoke end result.
**/
$('#output_post').submit(function(event) {
    event.preventDefault();
    var getValues = $(this).serialize();
    $.post( 'yourScript.php', getValues, function() {
        window.location.href = "/output.html";
    } 
});

对问题的评论

方法一

  • 这“离开”了功能。在允许执行脚本的其余部分之前,过早地让您离开页面。本机.submit()将遵循该动作,即缩进行为。因此,$.ajax从未跑过。

方法二

  • 服务器可以/可以决定它接受的内容类型。
  • 没有数据被发送到URL,因此 - 默认为GET(尽管类型: POST) 但没有序列化。给定的数组。
  • 如果您在方法二中定义“数据:值”,这可能会“表现”不同。
于 2013-10-14T22:15:53.220 回答
0

尝试这个:

var frm = $('#output_post');

$('#output_post').submit(function(event) {

$.ajax({
        type: "POST",
        url: frm.attr('action'),
        success: function(url) {
            window.location = "/output.html"
        }

    });

});

- 谢谢

于 2013-10-18T09:12:49.493 回答