Ajax如何与PHP一起工作?

Ajax如何与PHP一起工作?,php,ajax,forms,validation,submission,Php,Ajax,Forms,Validation,Submission,我在使用ajax和php时遇到问题。我要做的是调用一个ajax函数,它从表单的输入中获取一个值,并检查数据库中是否存在该电子邮件。以下是我当前的javascript: //Checks for Existing Email function checkExisting_email() { $.ajax({ type: 'POST', url: 'checkExist.php', data: input }); emailExist

我在使用ajax和php时遇到问题。我要做的是调用一个ajax函数,它从表单的输入中获取一个值,并检查数据库中是否存在该电子邮件。以下是我当前的javascript:

//Checks for Existing Email
function checkExisting_email() {
    $.ajax({
        type: 'POST',
        url: 'checkExist.php',
        data: input
    });

emailExists = checkExisting_email();

//If it exists
if (emailExists) {
    alert("This email already exists!");
}
不幸的是,我不能让我的警报响起。在我的PHP函数中,它检查输入是用户名还是电子邮件(只是为了我的目的,你知道的),然后在任一列中查找它。如果找到,则返回true;如果未找到,则返回false:

include ('func_lib.php');
connect();
check($_POST['input']);

function check($args)
{
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i";
    if (!preg_match($checkemail, $args)) {
        //logic for username argument
        $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'";
        $res = mysql_query($sql) or die(mysql_error());

        if (mysql_num_rows($res) > 0) {
            return true;
        } else {
            return false;
        }
    } else {
        //logic for email argument
        $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'";
        $res = mysql_query($sql) or die(mysql_error());

        if (mysql_num_rows($res) > 0) {
            return true;
        } else {
            return false;
        }
    }

}
所以我的问题是,ajax如何响应这些返回,以及如何使ajax相应地发挥作用?主要是,为什么这不起作用


非常感谢您的帮助。谢谢大家!

您需要在Ajax请求中添加
success
选项,这是在XHR成功时执行的JS函数。有关更多信息,请查看

如果不运行脚本,我想您会发现
$\u POST['input']
是空的;您需要像
data:{'input':input}
这样传递数据

您的PHP还需要向脚本返回一些内容;考虑将调用更改为<代码>校验()>代码>:
echo (check($_POST) ? 'true' : 'false');

现在,您可以用JavaScript检查内容。

基本上,ajax是一种与服务器握手的例行程序

阿贾克斯:

pagewithfunction:

yourFunction(){
   $var1 = $_POST['postkey1'];....
   $result = dosomething($var1..);
   echo json_encode($result); // this is passed into your function(response) of ajax call
}

因此,在$.post中,您有一个php页面的url,其中包含函数,{var:val}是post数据,函数(response)是处理从服务器返回的数据的地方——变量response,是echo'd的内容。

离题:当您将$\u POST变量直接传递到MySQL查询时,您的PHP不会受到XSS攻击,而无需使用一些转义函数,如
MySQL\u real\u escape\u string()
.Buckley,我想你的意思是sql注入,因为xss是一个依赖于用户运行任意javascript能力的前端。谢谢你纠正我的胡言乱语!谢谢你的回复。那么,如果我在那里成功了,它会是什么样子呢?从服务器返回的数据将是什么数据?基本上,我只需要ajax调用返回true或false,但我得到的“emailExists”是“undefined”。ajax调用默认不会返回任何内容,因为它是异步的。您需要创建一个回调函数,如:
functioncallback(data,status,xhr){if(data='true'){alert('ready exists!');}
,然后将
success:callback
添加到
.ajax
调用中。上面的文档链接提供了更多关于异步操作的信息。我明白你的意思,我已经尝试过了。我的问题是让数据变量返回true。检查($_POST['input']);函数检查($args)。。。。这就是我的问题所在,我不确定php是如何与ajax交互的,那么我的变量是如何反馈给php然后返回的呢?是返回true,还是尝试返回变量?这么多问题。。关键是,我甚至不认为成功是因为它不成功才被称为成功!再次感谢您的回复请参阅我对上述答案的编辑:您需要使用
data:'input从JavaScript正确传递POST变量=me@example.com“
数据:{input:”me@example.com“}
。默认情况下,POST数据的传递方式与查询字符串的传递方式相同。您甚至不需要使用POST:您可以使用GET,并将URL设置为
checkExist.php?输入=me@example.com
。然后将
$\u GET['input']
传递到
check()
。但我建议你还是坚持写这篇文章。事实证明我是个白痴!我用statuscode测试了404错误,结果发现我根本没有加载我的文件!我原以为ajax会从/js文件夹加载,但它是从根目录加载的,php在/includes中。无论如何,感谢你无数次的帮助,和我一起度过难关!非常感谢。
yourFunction(){
   $var1 = $_POST['postkey1'];....
   $result = dosomething($var1..);
   echo json_encode($result); // this is passed into your function(response) of ajax call
}