Ajax如何与PHP一起工作?
我在使用ajax和php时遇到问题。我要做的是调用一个ajax函数,它从表单的输入中获取一个值,并检查数据库中是否存在该电子邮件。以下是我当前的javascript: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
//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
}