【发布时间】:2014-01-29 10:38:00
【问题描述】:
我的 $.post 查询有问题。这是我的代码:
function verif_subscribe_sale() {
var URL_ROOT = "http://my_website.com/";
var email_sale = document.getElementById('email-sale');
var name_sale = document.getElementById('name-sale');
var url_sale = document.getElementById('url-sale');
var password_sale = document.getElementById('password-sale');
var token = document.getElementsByName('_token');
test = 0;
$.post(URL_ROOT + 'check-url', { url: url_sale.value, token: token.value } ).done(function( data ) {
if(data == "notok" || data.length < 4){
document.getElementById('error_url').style.display="block";
test = 1;
}
});
if(name_sale.value.length < 4){
document.getElementById('error_name_length').style.display="block";
test = 1;
}
if(check_email(email_sale) != true) {
document.getElementById('error_mail').style.display="block";
test = 1;
}
if(test == 0){
return true;
}else{
return false;
}}
此代码是从 HTML 表单中调用的:
<form action="{{{ URL::to('create_my_sale') }}}" method="post" onsubmit="return verif_subscribe_sale();">
问题是,由于post是异步的,即使post返回不满足条件也可以提交表单。 是否可以在提交表单之前等待 post 循环结束?我尝试了一些 stackoverflow 解决方案(如回调),但它不起作用......
编辑部分:
我在 JS 中尝试过这种方式:
function verif_subscribe_sale(callback) {
var URL_ROOT = "http://www.mysite.com/";
var url_sale = document.getElementById('url-sale');
var token = document.getElementsByName('_token');
test = 0;
$.post(URL_ROOT + 'check-url', { url: url_sale.value, token: token.value } ).done(function( data ) {
if(data == "notok" || data.length < 4){
document.getElementById('error_url').style.display="block";
test = 1;
}
});
callback(test);
}
function test_callback(test){
var name_sale = document.getElementById('name-sale');
var email_sale = document.getElementById('email-sale');
var password_sale = document.getElementById('password-sale');
if(name_sale.value.length < 4){
document.getElementById('error_name_length').style.display="block";
test = 1;
}
if(check_email(email_sale) != true) {
document.getElementById('error_mail').style.display="block";
test = 1;
}
if(test == 0){
return true;
}else{
return false;
}
}
我这样称呼它:
<form action="{{{ URL::to('create_my_sale') }}}" id="form-sale" method="post" onsubmit="return verif_subscribe_sale(test_callback);">
但它也不起作用......
【问题讨论】:
-
回调确实有效,并且它们是您拥有异步代码的唯一实用解决方案。您的函数将不起作用,因为您的验证在 AJAX 调用返回之前执行。您可能需要重组您的代码才能使其正常工作,但这不仅会影响您在此处拥有的功能。
-
回调是解决这个问题的方法。这是唯一的解决方案。如果它对您不起作用,那么您需要向我们展示您的回调代码并寻求修复它的帮助;由于帖子的性质是异步的,您在此处向我们展示的代码如果不变成回调就永远无法工作。
-
感谢您的回答。我不是 javascript 专家这不是我的代码,我不知道如何重构它...
标签: javascript jquery post asynchronous