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 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 如何与动态 Django 下拉列表一起工作?

如何使 php 与 postgresql 一起工作?

如何让 dataTable 与 PHP 一起工作

如何使用 get 方法将 ajax 与 graphql 一起使用?

如何使 SQL Server 2012 与 php 一起工作?

如何使 windows 符号链接与 mod_php 一起工作?