使用php脚本中的ajax返回成功/失败变量

时间:2015-04-09 06:46:33

标签: 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似乎是在提交后没有引导模式关闭的方式(禁止默认事件)。

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

但是我无法设法显示不同的错误消息(存储在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已安装并正常工作。

5 个答案:

答案 0 :(得分:0)

您需要echo将您的消息发送回您的AJAX。您的PHP代码中没有地方消息将返回到AJAX成功中的message变量。

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.";
            echo $error; die;
        } else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $error.=" please enter a valid email address.";
            echo $error; die;
        }
        if($error) {
            $error= "There was an error in your signup,".$error;
            echo $error; die;
        } 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.";
                echo $error; die;
            } else {
                $query = "INSERT INTO `email_list` (`email`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."')";
                mysqli_query($link, $query);
                $message = "Thanks for subscribing!";
                echo $message; die;
            }
        }
    } 

答案 1 :(得分:0)

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

你必须用php打印一些文本,ajax success函数获取此输出。然后你解析这个输出,看看它是怎么回事。

最佳做法是:

php部分:

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

js / html part:

$.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
    }
});

祝你的项目好运

答案 2 :(得分:0)

我基本上只有同样的情况。我的代码结构有点不同,但它的工作原理......

$("#sub").submit(function (){
    event.preventDefault();
    $.ajax( {
        url: "newsletter2.php",
        type: "POST",
        dataType: 'json',
        data: {email: $("#email").val()},

})
   .success(function(message) {
            $("#result").html(message);
        }),
    .error(function(error) {
            $("#result").html(error);
        })

在服务器端我使用C#(asp.net)并返回了一个Json

return Json(new { Message = "Something...", Passed = true}, JsonRequestBehavior.AllowGet);

答案 3 :(得分:0)

Oukay,最后我设法通过这里的大输入来解决问题。我做了以下事情:

PHP:

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

JS:

    $("#newsletter").submit(function(event) {
            event.preventDefault();

        $.ajax({
            url: 'newsletter3.php',
            method: 'post',
            data: {email: $('#email').val()},
            success: function(data) {
                var response = JSON.parse(data);
                console.log(response);
                if (response['success']) {
                    $("#error").hide();
                    $("#success").html(response['success']);
                    $("#success").toggleClass("alert alert-success");
                } else {
                    $("#error").html(response['error']);

                    if(!$("#error").hasClass("alert alert-danger"))
                        $("#error").toggleClass("alert alert-danger");
                }
            }
        });
    });

现在的功能是你点击一个按钮和一个模式弹出窗口,然后你可以输入你的电子邮件,php脚本验证它是否有效以及它是否已经在数据库中。错误和成功消息获得JSON编码,然后显示在根据引导类危险或成功改变颜色的范围中。

非常感谢您帮助我,我对第一个解决的编码问题感到非常满意:)

答案 4 :(得分:0)

我在我的ajax上使用它

request.done(function (response, data) {
                   $('#add--response').html(response);
});

和PHP上的这个

die("Success! Whatever text you want here");
相关问题