php - 使用ajax从php脚本返回成功/失败变量

标签 php jquery mysql ajax twitter-bootstrap

我是一名真正的新程序员,正在努力完成我现在正在努力并尝试了几天的任务。

我搜索了 Google 和 Stack Overflow,但找不到(对我来说可以理解的)问题解决方案:

我创建了一个 Twitter Bootstrap 登录页面,单击时会显示一个模式。在此模式中,我有一个包含时事通讯订阅的表单:

 <form id="newsletter" method="post">
    <label for="email">Email:</label><br/>
    <input type="text" name="email" id="email"/><br/>
    <button type="submit" id="sub">Save</button>
</form>

<span id="result"></span>    

现在我想将数据插入 mySQL 数据库并执行一些返回错误或成功消息的基本验证。该脚本在没有 ajax 的情况下工作正常,但可能需要更改它为 ajax 返回的内容?

    include("connection.php");

    if ($_POST['email']) {

        if(!empty($_POST['my_url'])) die('Have a nice day elsewhere.');
        if (!$_POST['email']) {
            $error.=" please enter your email address.";
        } else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $error.=" please enter a valid email address.";
        }
        if($error) {
            $error= "There was an error in your signup,".$error;
        } else {
            $query="SELECT * FROM `email_list` WHERE email='".mysqli_real_escape_string($link, $_POST['email'])."'";
            $result = mysqli_query($link, $query);
            $results = mysqli_num_rows($result);
            if ($results) { 
                $error.=" this email address is already registered.";
            } else {
                $query = "INSERT INTO `email_list` (`email`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."')";
                mysqli_query($link, $query);
                $message = "Thanks for subscribing!";
            }
        }
    } 

经过大量阅读后,ajax 似乎是在提交后无需关闭 Bootstrap 模式的方法(以抑制默认事件)。

插入数据库工作正常,验证也正常。

但是我无法设法显示不同的错误消息(存储在 php 文件的 $error 变量中),或者在成功的情况下显示 $message。

这是 jquery 脚本:

$("#sub").submit(function (){
    event.preventDefault();
    $.ajax( {
        url: "newsletter2.php",
        type: "POST",
        data: {email: $("#email").val()},
        success: function(message) {
            $("#result").html(message);
        },
        error: function(error) {
            $("#result").html(error);
        }
});

我尝试在 #result 范围内的 php 脚本中显示错误和消息变量的值。

感谢任何帮助。请非常直接地表述它,因为我对这个领域真的很陌生。

提前非常感谢您。

编辑: 在 php 文件中添加了一些内容以创建数组并将消息存储在其中:

    $response = array();
    $response['success'] = $success;
    $response['error']= $errors;
    exit(json_encode($response));

但是要让 ajax 工作仍然遇到一些麻烦。尝试了简写 $.post 而不是 $.ajax,但现在他们甚至不能开始发布数据......

$("#sub").submit(function (){
    event.preventDefault();
    $.post("newsletter.php", {email: $("#email").val() });
});

非常感谢快速的时间。经过几个小时的测试后我陷入困境,找不到错误。如果我定期提交表单,它工作正常,所以 php/mysql 部分不是问题。

我还意识到,当我单击“#sub”按钮时,它仍然尝试通过 get 提交表单(URL 获取传递的值)。所以我不确定 event.preventDefault(); 是否有效不工作? jQuery 已安装并正在运行。

最佳答案

当出现连接错误或无法找到请求的页面时,将调用 $.ajax 错误函数

您必须使用 php 打印一些文本,并且 ajax success 函数会获取此输出。然后你解析这个输出,看看它是如何进行的。

最佳实践是这样的:

php部分:

$response = array();
$response['success'] = $success;
$response['general_message'] = $message;
$response['errors']  = $errors;
exit(json_encode($response));

js/html部分:

$.post("yourpage.php", a , function (data) {
    response = JSON.parse(data);
    if(response['success']){
        //handle success here
    }else{
        //handle errors here with response["errors"] as error messages
    }
});

祝你的项目顺利

关于php - 使用ajax从php脚本返回成功/失败变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531598/

相关文章:

javascript - 创建 Jquery 函数以将值发送到 php

php - session 变量仅检索以前的值

jquery - 我可以将类应用于包含链接的表行,而不是链接本身吗?

mysql - 如何使用 Hibernate 从 mysql 获取单个记录的计数

php - MySQL 检查 3 个或更多连续条目

php - 使用 laravel 存储与图像干预 canvas()

jquery - 如何附加复选框值以在ajax中发送数据?

javascript - 如何使每个 Accordion 菜单上的人字形图标旋转

c# - 什么是 php 中的 tinytext 以及 tinytext 和 string 之间的区别是什么?

cakephp - Cakephp 1.3 和 PHP 5.3.2 的时区和更多问题