$ .ajax:url在提交时没有“响应”

时间:2011-08-08 04:34:22

标签: jquery

我正在使用以下方式验证并提交表单:

$(documend).ready(function(){
//setting variables

ext_form.submit(function(){
   if(validateExt_email() & validateExt_pass()){

   var ext_email = $('#ext_email').attr('value');
   var ext_pass = $('#ext_pass').attr('value');

   $.ajax({
      type: "post",
      url: "validation_ext.php",
      data: "ext_email="+ ext_email +"& ext_pass="+ ext_pass,
      success: function (){
         $('#content').load('p_order_ok.php');
      }
   })
      return false;
   }else
    return false;
});

//validation rules
});

我认为当我将电子邮件验证规则更改为:

时,它停止了工作
//validation rules
//e-mail
function validateExt_email(){
var ext_a = $("#ext_email").val();

var emailXHR =   $.ajax({
                   type: "post",
                   url: "check_email_ext.php",
                   data: "email="+ext_a,
                   success: function(rsp){
                     //if it exists in our db
                     if(rsp == "exists"){
                       //do something
                       return true;
                     }
                     else
                     //if it's valid but not in our db
                     if(rsp == "ok" ){
                       // do something else
                       return false;
                     }
                     else
                     //if it's NOT valid
                     if(rsp == "invalid"){
                       //do something different
                       return false;
                     }   
                   }
                 }).success = function() {
}
//continuing validation
)};

现在所有内容都经过验证,我点击了提交按钮,而不是在“validation_ext.php”中发布的表单在“check_email_ext.php”中发布(如firebug所示)。

任何帮助/建议?

谢谢

编辑.... 我放弃了这个...我只是用过滤器和正则表达式来验证电子邮件。 (简单的方法)

谢谢大家

3 个答案:

答案 0 :(得分:2)

我认为你错了validateExt_email()函数没有返回布尔值(而是undefined),因为$.ajax异步触发请求而JavaScript不等待用于success回调。这意味着在这种情况下:

if(validateExt_email() & validateExt_pass()) { // always false

因为validateExt_email()始终评估为falseundefined falsy )。

您可以重构您的解决方案,以便整个表单提交仅在ajax验证函数返回后发生,即success是关键,例如:

ext_form.submit(function(){

    // your email ajax checker
    var emailXHR = $.ajax({
                       type: "post",
                       url: "check_email_ext.php",
                       ...
                   }).success = function() {
                       // do next validation step
                   });

答案 1 :(得分:0)

这就是你的代码所要做的。

它表示,无论何时提交表单:

  1. 致电validateExt_email,向check_email_ext.php
  2. 发出请求
  3. 致电validateExt_pass
  4. 如果两个函数都返回true,请发布到validation_ext.php
  5. 返回false
  6. validateExt_email永远不会返回任何值,因此您的情况永远不会过去。

答案 2 :(得分:-1)

您需要在选项中更改为async:false。

此外,您的范围可能无效。您会看到函数(e)将返回true或false。这是一个匿名函数。你应该做的是设置一个与你的提交处理程序具有相同范围的值,然后在最后一行,返回它。