我从一周开始就有个棘手的问题.
在一页上,我有这样一个简单的表单:
<form action="another-page.php" method="post" target="_blank" id="buyCredit">
<button id="sendPayment">Access to this page</button>
</form>
单击按钮(女巫有id sendPayment
),我有以下代码:
$('#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");
}
});
我的问题是:
alert('Success')
。所以它进入了if()
。但是有一件事不起作用:表单不是提交的。就像它被别的东西挡住了一样.
奇怪的是..。
如果我去掉这条线,那就很管用了。
return $.post("/assets/php/ajax/dashboard_buyCredit.php", "json");
跳你会帮我的!
这里是这个页面的一个测试链接:http://goo.gl/Jn4o6y
谢谢。
发布于 2015-02-03 19:00:56
您不需要函数buyCredit()
。命名像元素It这样的函数也不是很好的做法。还有..。
.serialize()
将表单转换为可以发布的字符串。submit
事件,而不是submit按钮上的click
事件。还有其他提交表单的方法(比如按Enter键)。你也想抓到他们。event.preventDefault()
可以防止传统的表单传输。$()
中是没用的。.always()
回调来可靠地关闭加载动画。修改后的代码:
$('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");
});
});
https://stackoverflow.com/questions/28306298
复制相似问题