【问题标题】:Ajax code doesn't work inside of jquery form validationAjax 代码在 jquery 表单验证中不起作用
【发布时间】:2014-12-28 21:20:55
【问题描述】:

我想编写(注册部分)代码,可以检查过去是否使用过电子邮件或登录是否为空。

代码运行良好,但我的 ajax 代码根本无法运行。

我检查了一切,php文件的路径是好的,变量是好的等等。不知道如何解决它。

代码:

$('.login').submit(function(e) {

    e.preventDefault();
    var error = 0;
    var self = $(this);

    var $name = self.find('[type=name]');
    var $email = self.find('[type=email]');
    var $pass = self.find('[type=password]');

    var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

    if (!emailRegex.test($email.val())) {
        createErrTult("Błąd! Email ma zły format!", $email)
        error++;
    }

    //MY AJAX CODE
    var email = $email.val();

    $.ajax({
        url: '../inc/rejestracja.php?action=emailcheck',
        data: {
            'email': email
        },
        type: 'POST',
        success: function(odp) {
            if (odp == 1) {
                createErrTult("Błąd! taki email już istnieje w bazie!", $email)
                error++;
            }
        }
    });

    if ($name.val().length > 1 && $name.val() != $name.attr('placeholder')) {
        $name.removeClass('invalid_field');
    } else {
        createErrTult('Error! Wrong name!', $name)
        error++;
    }

    if ($pass.val().length > 1 && $pass.val() != $pass.attr('placeholder')) {
        $pass.removeClass('invalid_field');
    } else {
        createErrTult('Error! Wrong password!', $pass)
        error++;
    }

    if (error != 0) return;
    self.find('[type=submit]').attr('disabled', 'disabled');

    self.children().fadeOut(300, function() {
        $(this).remove()
    })
    $('<p class="login__title">sign in <br><span class="login-edition">welcome to A.Movie</span></p><p class="success">You have successfully<br> signed in!</p>').appendTo(self)
        .hide().delay(300).fadeIn();

    // var formInput = self.serialize();
    // $.post(self.attr('action'),formInput, function(data){}); // end post
});

php:

<?php

include ("config.php");

  if($action == "emailcheck"){

      //sprawdzamy czy był już dodany plus
      $test = mysql_num_rows(mysql_query("select * from uzytkownicy where email='$email'"));
            if ($test > 0) {
                $dodano = 1;
                echo json_encode($dodano); 


      }
?>

【问题讨论】:

  • 您是否尝试过捕获click 事件而不是submit 事件?
  • 我建议:首先,缩进代码。然后在 ajax 调用中添加错误处理程序以查看它是否触发。另外,您是否在浏览器中对其进行了调试? ajax 调用是否使用正确的值等?
  • @Sparky submit 工作正常,整个验证工作除了 ajax 部分。
  • 至少你的 php 代码错过了一个结束 }.
  • 开发者控制台显示什么?有任何错误或警告吗?

标签: php jquery ajax validation


【解决方案1】:

首先,您应该尝试添加error 回调:

$.ajax({
    url: '../inc/rejestracja.php?action=emailcheck',
    data: {
        'email': email
    },
    type: 'POST',
    success: function(odp) {
        if (odp == 1) {
            createErrTult("Błąd! taki email już istnieje w bazie!", $email)
            error++;
        }
    },
    error: function(xhr, textStatus, error) // THOSE ROWS
    {
       alert(error);
    }
});

这可能会提醒您一些发生的错误。

其次,可以尝试用json代替纯文本:

客户端:

$.ajax({
    url: '../inc/rejestracja.php?action=emailcheck',
    data: {
        'email': email
    },
    dataType: 'json', // THIS ROW
    type: 'POST',
    success: function(odp) {
        if (odp['result'] == 1) {
            createErrTult("Błąd! taki email już istnieje w bazie!", $email)
            error++;
        }
    },
    error: function(xhr, textStatus, error)
    {
       alert(error);
    }
});

服务器端:

<?php

include ("config.php");
if (isset($_GET['action'])){
    $action = $_GET['action'];
    if($action == "emailcheck") {
      if(isset($_GET['email'])) {
        $email = $_GET['email'];
        //sprawdzamy czy był już dodany plus
        $test = mysql_num_rows(mysql_query("select * from uzytkownicy where email='$email'"));
        if ($test > 0) {
            $dodano = 1;
            echo (json_encode(array("result" => $dodano))); // THIS ROW
        }
      }
    }
}
?>

【讨论】:

  • 那个错误回调给了我:[Object object] 警报。所以它不起作用,但为什么呢?
  • 呃,我的错。尝试改用此错误回调:function(xhr, textstatus, error) { alert(error); }。这应该显示正确的错误原因。我改了答案的代码,你可以看看。
  • 给我:未找到作为我也尝试过的警报:alert(JSON.stringify(error)); 结果图片(看起来像我的本地主机的 404 页面的代码):reslut image link跨度>
  • 是的,这意味着 $.ajax 找不到指定的 url。看起来您在使用该相对 URL 时遇到了问题。顺便说一句,您应该了解相对路径是相对于您的页面而不是您的脚本。再次检查您的网址,可能是错误。如果不是,您可以尝试将其更改为绝对值一段时间。我的意思是,不要使用../inc/...,而是使用http://mywebsite.pl/inc/... 之类的东西。
  • 是的,那是浪费 :) 谢谢。还有一个问题,我得到了数据库的回复,但是success Ajax 里面的error++; 不起作用。我该如何解决?
【解决方案2】:

在一切检查您 config.php 文件路径之前。在您的情况下,config.php 应该与 rejestracja.php 位于同一路径中> 试试这个.. 让我们从 ajax 开始

$.ajax({
        url: '../inc/rejestracja.php?action=emailcheck',
        data: {
            email: email
        },
        type: 'GET',
        success: function(odp) {
            if (odp == 1) {
                alert('Email exists');
            }else{
                alert('Email dosen\'t exists');
            }
        }
    });

然后在php中

<?php

include ("config.php");
if (isset($_GET['action'])){
   $action = $_GET['action'];
  if($action == "emailcheck"){
      if(isset($_GET['email'])){
         $email = $_GET['email'];
         //sprawdzamy czy był już dodany plus
         $test = mysql_num_rows(mysql_query("select * from uzytkownicy where email='$email'"));
            if ($test > 0) {
                $dodano = 1;
                echo ($dodano); 

        }
    }
}
?>

你应该得到警报('电子邮件存在')

【讨论】:

  • 仍然无法正常工作,没有收到任何消息,甚至不存在电子邮件。 Ajax 在这段代码中根本不起作用:/ 当然包括配置。当我在浏览器中运行时:rejestracja.php?action=emailcheck?email=test@test.pl 我得到 1 所以 php 文件工作正常。
  • @MichałLipa 好的,最后尝试将 ajax url 中的 ../ 更改为 ./ 我的意思是将双点更改为一个点,希望对您有所帮助
  • 检查过了,没问题。
猜你喜欢
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多