2011-04-16 102 views
0

在我的表单提交中,我尝试使用load()来运行PHP脚本,将数据添加到我的数据库,然后在完成时提交表单。但是,如果表单提交true,则数据不会添加到我的数据库中,但如果它返回false,则返回false。这里基本上是我看到的:表单提交前的jQuery加载()

if(//form not empty){ 
    $j('#allset').load(url, function(){ 
     return true; 
    }); 
} else { 
    return false; 
} 

我不知道它是否重要,但我试图提交的表单是一个贝宝形式。

任何人都知道我能做些什么来解决这个问题?谢谢!

+0

你如何测试如果表单不是空的? – EmCo 2011-04-16 10:42:45

+0

我们可以看到你的实际函数而不是你的伪代码,因为在你的伪代码中,至少你有第二个paran和第一个大括号注释掉了。 – Canuteson 2011-04-16 10:43:35

+0

除非你在这里拷贝它之后没有改变代码,@Canuteson说的肯定是问题 – 2011-04-16 10:46:18

回答

0

从回调中返回true将不起作用。事件处理程序在进行Ajax调用后将立即返回。它不会等待呼叫完成(Ajax是异步)。

在任何情况下都阻止了表单提交,然后在Ajax请求完成后再次提交表单。类似这样的:

(function() { 
    var processed = false; 

    $(form).submit(function(event){ 
     if(processed) {   // data sent fo the server? 
      processed = false; 
      return true; 
     } 

     event.preventDefault(); // prevent form submission 

     if(/* form not empty */) { 
      $.get(url, function() { // do you need load? 
       processed = true; 
       $(form).submit(); 
      }); 
     } 
    }); 
}()); 
+0

我没有使用这个确切的解决方案,但我将其标记为答案,因为它仍然是正确的。我做了这样的代码: '$('。submit')。click(function(){ return false; if(/ * form not empty * /){('#allset')。load url,function(){$('#form')。submit();}); } });' – HWD 2011-04-16 19:46:44

+0

@HWD:是的,我也想过这个。但请记住,还可以通过按Enter键提交表单。 – 2011-04-16 20:39:21