Ajax 如何与 PHP 一起工作?
Posted
技术标签:
【中文标题】Ajax 如何与 PHP 一起工作?【英文标题】:How does Ajax work with PHP? 【发布时间】:2011-05-08 20:41:51 【问题描述】:我在使用 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 相应地发挥作用?主要是,为什么这不起作用?
非常感谢任何帮助。谢谢!
【问题讨论】:
题外话:你的 PHP 容易受到 XSS 攻击,因为你将 $_POST 变量直接传递给你的 MySQL 查询,而不使用像mysql_real_escape_string()
这样的转义函数。
巴克利,我认为你的意思是 sql 注入,因为 xss 是一个依赖于用户运行任意 javascript 能力的前端。
感谢您纠正我的胡言乱语!
【参考方案1】:
您需要将success
选项添加到您的Ajax 请求中,这是XHR 成功时执行的JS 函数。请查看jQuery documentation 了解更多信息。
如果不运行脚本,我想你会发现$_POST['input']
是空的;您需要以 data: 'input': input
之类的形式传递数据。
你的 PHP 还需要向脚本返回一些内容;考虑将您对 check()
的呼叫更改为以下内容:
echo (check($_POST) ? 'true' : 'false');
您现在可以在 JavaScript 中检查内容。
【讨论】:
感谢您的回复。所以如果我在那里取得成功,它会是什么样子?从服务器返回的数据会是什么数据?基本上,我只需要那个 ajax 调用来返回 true 或 false,但我得到的 'emailExists' 是 'undefined'。 默认情况下,Ajax 调用不会返回任何内容,因为它是异步的。您需要创建一个回调函数,例如:function callback(data, status, xhr) if (data == 'true') alert('Already exists!');
,然后将success: callback
添加到您的.ajax
调用中。上面的文档链接有更多关于异步操作的信息。
我明白你的意思,而且我已经尝试过了。我的麻烦是让该数据变量返回true。检查($_POST['输入']); function check($args).... 这就是我的麻烦所在,我不确定 php 如何与 ajax 交互,那么我的变量如何被馈送到 php,然后返回?它是返回真,还是试图返回一个变量?这么多问题..关键是,我什至不认为成功被称为是因为它不成功!再次感谢您的回复。 ;)
查看我对上述答案所做的编辑:您需要使用 data: 'input=me@example.com'
或 data: input: 'me@example.com'
从 JavaScript 正确传递 POST 变量。默认情况下,POST 数据的传递方式与查询字符串一样。您甚至不需要使用 POST:您可以使用 GET,并将您的 URL 设为checkExist.php?input=me@example.com
。然后你会将$_GET['input']
传递给check()
。但我建议坚持使用 POST。
事实证明我是个白痴!我用状态码测试了 404 错误,结果发现我根本没有加载我的文件!我以为 ajax 会从 /js 文件夹加载,但它是从根目录加载的,而 php 在 /includes 中。无论如何,感谢您一百万次的帮助并与我一起坚持下去!非常感谢。【参考方案2】:
基本上,ajax 是与您的服务器握手的例程。
阿贾克斯:
$.post('yoursite.com/pagewithfunction.php',
postkey1:postvalue1, postkey2:postvalue2...,
function (response)
// response is the data echo'd by your server
, 'json'
);
页面与功能:
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 是发布数据,而 function(response) 是您处理从服务器回显的数据的地方 - - 变量 response 是回显的内容。
【讨论】:
以上是关于Ajax 如何与 PHP 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 get 方法将 ajax 与 graphql 一起使用?