首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启用在jQuery中的post()之后提交表单

启用在jQuery中的post()之后提交表单
EN

Stack Overflow用户
提问于 2015-02-03 18:37:14
回答 1查看 81关注 0票数 1

我从一周开始就有个棘手的问题.

在一页上,我有这样一个简单的表单:

代码语言:javascript
运行
复制
<form action="another-page.php" method="post" target="_blank" id="buyCredit">
    <button id="sendPayment">Access to this page</button>
</form>

单击按钮(女巫有id sendPayment),我有以下代码:

代码语言:javascript
运行
复制
$('#sendPayment').click(function(event) {
    event.preventDefault();
    $(buyCredit()).done(function(r_buyCredit){
        var json = $(r_buyCredit);
        if(json.type=="success") {
            alert('Success');
            $('form#buyCredit').submit();
        }
        else {
            alert('Error');
            alert(json.mess);
        }
    });

    function buyCredit() {
        $("#loader").toggleClass("hide show");
        return $.post("/assets/php/ajax/dashboard_buyCredit.php", "json");
    }
});

我的问题是:

  1. 我可以通过开发工具看到ajax请求。他们很棒。
  2. 我可以看到我的alert('Success')。所以它进入了if()

但是有一件事不起作用:表单不是提交的。就像它被别的东西挡住了一样.

奇怪的是..。

如果我去掉这条线,那就很管用了。

代码语言:javascript
运行
复制
return $.post("/assets/php/ajax/dashboard_buyCredit.php", "json");

跳你会帮我的!

这里是这个页面的一个测试链接:http://goo.gl/Jn4o6y

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-02-03 19:00:56

您不需要函数buyCredit()。命名像元素It这样的函数也不是很好的做法。还有..。

  • 您似乎希望通过Ajax发送数据,而不是通过传统的表单传输(即重新加载页面的表单传输)。但是你的投递电话不会传输任何数据。可以使用.serialize()将表单转换为可以发布的字符串。
  • 您应该侦听表单上的submit事件,而不是submit按钮上的click事件。还有其他提交表单的方法(比如按Enter键)。你也想抓到他们。
  • 在提交事件处理程序中使用event.preventDefault()可以防止传统的表单传输。
  • jQuery为您解码响应。您可以直接使用它,将它封装在$()中是没用的。
  • 您可以使用Ajax调用的.always()回调来可靠地关闭加载动画。

修改后的代码:

代码语言:javascript
运行
复制
$('form#buyCredit').submit(function(event) {
    var formdata = $(this).serialize();

    event.preventDefault();

    $("#loader").removeClass("hide").addClass("show");

    $.post("/assets/php/ajax/dashboard_buyCredit.php", formdata)
    .done(function (result){
        if (result.type === "success") {
            console.log('Success');
        } else {
            console.log('Error', result.mess);
        }
    })
    .fail(function (jqxhr, status, statustext) {
        // an HTTP error has occurred, react to it 
    })
    .always(function () {
        $("#loader").removeClass("show").addClass("hide");
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28306298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档