【问题标题】:JQuery $.post & php 'if' statement stops workingJQuery $.post & php 'if' 语句停止工作
【发布时间】:2011-08-25 17:30:47
【问题描述】:

这是非常具体的,我还没有找到答案。
我正在编写一个脚本来检查一个名称是否已经使用 JQuery $.POST 输入到 SQL 服务器中。

前端是这样的:

注册.php

<div id="container" class="container">
    <div id="wrapper" class="wrapper">
        <div id="title" class="title">
            Welcome to Taskar!
        </div>
        <div id="login" class="login">
            <form method="post" action="registermembers.php">
            <div id="exists">
                Register Your Company Below:
            </div>
            <input type="text" id="company" name="company" value="Company Name"/> <br />
            <br />
            <input type="text" id="password" name="password" value="Default Password"/> <br />
            <input type="submit" name="submitcompany" value="Submit" />
            </form>

            <script>
            $(document).ready(function() {
                $('#company').keyup(function() {
                    var $company = $(this).val();
                    var $reg = $('#exists').html();
                    $.post('include/reg_post.php', { company: $company, reg: $reg }, function(company) {
                    $('#exists').html(company);
                    });
                });
            });
            </script>

        </div>
    </div>
</div>

后端代码如下所示:

reg_post.php

<?php
include 'include/db.php';

$reg = $_POST['reg'];
$company = $_POST['company'];
$email_hash = $_COOKIE['email_hash'];
$password = $_COOKIE['password'];

$sql = "SELECT * FROM taskar_employee WHERE (company = '$company')";
$result = mysql_query($sql) or die(mysql_error());
    if(mysql_num_rows($result) <= 1){
        echo $reg;
    } else {
        echo "This Company Already Exists!";
    } ?>

现在,我遇到的问题是,当我对此进行测试时,它一直运行良好,直到我输入数据库中的公司名称。它显示公司已经注册。当我按退格键或键入另一个字母时,它仍然告诉我公司仍然存在,尽管它显然不会。

if 语句在得到相反的语句后似乎想阻止 $.post 功能继续运行?

你们觉得呢?

【问题讨论】:

  • 每次击键时询问 db 是否是个好主意?如果您有许多用户同时执行此操作,则可能会有很多请求。
  • @morgar 有一个很好的观点。最好在您的事件处理程序中使用 setTimeout 以确保用户在您进行 POST 之前已停止输入一段时间。这是一个例子(使用dojo而不是jQuery,但setTimeout是纯js):davidwalsh.name/javascript-settimeout

标签: php jquery sql if-statement .post


【解决方案1】:

您的问题在于您使用 $reg 变量的方式。

$reg 包含#exists div 的 HTML 内容,因此它是“在下面注册您的公司:”开始。但是,一旦您找到了一个确实存在的公司名称,您就可以将该 HTML 替换为“该公司已经存在!”。从那时起,$reg,在 JavaScript 和 PHP 方面,总是“这家公司已经存在了!” (因为您总是在 POST 中传递 $reg)。

如果该 div 的内容根本不传递给 PHP 代码或由 PHP 代码处理,这可能会容易得多。如果您的 PHP 脚本在公司存在时返回“1”,如果不存在则返回“0”(或其他一些同样简单的标志),这会更简单。

然后,在 JavaScript 方面,您可以这样做:

$.post('include/reg_post.php', { company: $company }, function(exists) {
    var message;
    if (exists === '1') {
        message = 'This Company Already Exists!';
    }
    else {
        message = 'Register Your Company Below:';
    }
    $('#exists').html(message);
});

【讨论】:

  • 哇!我不敢相信我没有注意到这一点!非常感谢!
【解决方案2】:

如果找不到公司,您将传递 $('#exists').html(); 以返回。问题是,如果找到该公司,您将替换 #exists 中的 html。然后,下次您调用该帖子时,您会将此文本传递回去,因此在这种情况下:

if(mysql_num_rows($result) <= 1){
    echo $reg;
} else {
    echo "This Company Already Exists!";
} 

您的 $reg 现在设置为 This Company Already Exists!,因此无论发生什么情况,您都将返回该文本。

【讨论】:

  • 我现在觉得很傻!谢谢你的回答!我真的很感激!
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多