Javascript / Ajax / PHP - 小问题让我疯狂

时间:2014-02-10 18:46:38

标签: javascript php ajax

我需要一些指导,因为我在这里真的很疯狂。

我已经用php / js / ajax创建了代码来检查提交时是否存在电子邮件地址。

所以我测试了ajax并返回了正确的值。 (通过萤火虫检查)

Either 1 for user exists
or     2 for user doe not exist.

现在我添加了一个警告框来检查值,由于一些奇怪的原因,它总是显示值1! (即使ajax值为2)

    function validateForm() {
        var x3=document.forms["newuser"]["email"].value;

        //Check if username exists.
        $.post(
            "http://...check_user_exists.php",  
            {
                x3 : x3  //user email
            },

            function(data) {
                email_check = parseInt((data.email_exists),10);
            }
        );

        //Additional Checks      
        if (email_check = 1) {
            $("#form_status").fadeIn("slow");
            $("#form_status").text("Email Address Taken.");
            alert(email_check);
            return false;   
        }

        if (email_check = 2) {
            $("#form_status").fadeIn("slow");
            $("#form_status").text("Email ok.");
            alert(email_check);
            return true;    
        }

        more validation checks....

大家好,再次......谢谢你的善意指导。 首先,我想道歉,因为我对此很新... 我已经向前迈进了一步,但坚持到最后一部分并且不确定如何继续。

因此,表单现在验证表单元素并检查电子邮件以查看它是否存在。 我留下的唯一问题是,如果电子邮件值正常,则表单不会处理。 有没有办法使用ajax回调函数将提交值设置为true?

<form name="newuser" id="form" method="post" action="do_new_user.php" onsubmit="return    validateForm()"> 

function validateForm()
{
var x=document.forms["newuser"]["name"].value;
var x2=document.forms["newuser"]["surname"].value;
var x3=document.forms["newuser"]["email"].value;
var x4=document.forms["newuser"]["password1"].value;
var x5=document.forms["newuser"]["password2"].value;

if (x==null || x=="") 
  {

  $("#form_status").fadeIn("slow");
  $("#form_status").text("Please enter your name.");
  return false;
  }

  //more validation.....

//Check if username exists.
$.post("http://ryangosden.com/breadcrumbs/check_user_exists.php",  
         {
            x3 : x3
         } , 

         function(data)
          { 

            var obj = jQuery.parseJSON(data);

            if (obj.email_exists == 1) 
              {   
                $("#form_status").fadeIn("slow");
                $("#form_status").text("Email Address Taken.");

            }  

            if (obj.email_exists == 2)   
              {   
            $("#form_status").fadeIn("slow");
                $("#form_status").text("Email ok.");
                validateForm(true);
              }  
});

return false;  

}

再次感谢所有人。

3 个答案:

答案 0 :(得分:5)

您没有进行比较,只是将1分配给email_check

if (email_check = 1) 

但应该是

if (email_check == 1) 

= is an assignment operator
== is a comparison operator
=== is a strict comparison operator

答案 1 :(得分:1)

为什么要分配值而不是比较它。

=指定值

==比较值

if (email_check = 1)

你应该这样做:

if (email_check == 1)

if (email_check == 2)

答案 2 :(得分:0)

回调函数是异步调用的。因此,您无法以您期望的方式调用validateForm(),与服务器联系,解析结果,并返回truefalse。实际发生的是$post( ...代码运行但不等待响应。相反,它会立即继续执行代码if (email_check = 1) { ...(应该有==而不是=),而无需等待POST响应。只有在收到响应后,才会通过回调函数实际设置email_check,但validateForm()的剩余部分已经完成。

相反,无论您打算如何处理返回值,都必须在回调函数中进行。也就是说,替换

function(data)
    { 
    email_check = parseInt((data.email_exists),10);
    });

function(data)
    { 
    email_check = parseInt((data.email_exists),10);
    alert("In callback: email_check = "+email_check);
    if (email_check == 1) {
        $("#form_status").fadeIn("slow");
        $("#form_status").text("Email Address Taken.");
    }

    if (email_check == 2) {
        $("#form_status").fadeIn("slow");
        $("#form_status").text("Email ok.");
    }
    });

您使用validateForm()的返回值执行的任何其他操作也应该包含在回调函数中。