【问题标题】:How does Ajax work with PHP?Ajax 如何与 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 能力的前端。
  • 感谢您纠正我的胡言乱语!

标签: php ajax forms validation submission


【解决方案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 是回显的内容。

【讨论】:

    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2011-04-04
    • 2012-11-20
    • 2017-06-25
    • 2012-05-25
    • 2011-01-02
    相关资源
    最近更新 更多