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

使用php脚本中的ajax返回成功/失败变量,php,jquery,mysql,ajax,twitter-bootstrap,Php,Jquery,Mysql,Ajax,Twitter Bootstrap,我是一名真正的新程序员,正在为一项任务而奋斗,这项任务我现在正在进行,并尝试了好几天 我搜索了Google和Stack Overflow,但找不到(对我来说可以理解)解决问题的方法: 我创建了一个Twitter引导登录页面,点击后会显示一个模式。在此模式中,我有一个订阅新闻稿的表单: <form id="newsletter" method="post"> <label for="email">Email:</label><br/>

我是一名真正的新程序员,正在为一项任务而奋斗,这项任务我现在正在进行,并尝试了好几天

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

我创建了一个Twitter引导登录页面,点击后会显示一个模式。在此模式中,我有一个订阅新闻稿的表单:

 <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>    
经过大量阅读,ajax似乎是一种在提交后不关闭引导模式(以抑制默认事件)的方法

在DB中的插入工作正常,验证也正常

但是我无法设法显示不同的错误消息(存储在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);
        }
});
我尝试在#结果范围内显示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成功中的
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;
            }
        }
    } 

当存在连接错误或找不到请求的页面时,将调用$.ajax error函数

您必须使用php打印一些文本,ajax成功函数将获得此输出。然后解析这个输出,看看它是如何运行的

最佳做法是:

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

祝你的项目好运

我基本上也有同样的案例。我的代码结构有点不同,但它工作得很好

$("#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);

Oukay,我终于用这里的大量输入解决了这个问题。我做了以下工作:

PHP:

JS:

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

非常感谢您对我的帮助,我很高兴我的第一个编码问题得到了解决:)

我在ajax上使用了它

request.done(function (response, data) {
                   $('#add--response').html(response);
});
这是关于PHP的

die("Success! Whatever text you want here");

显示您的错误消息。使用echo mate。回声$信息;谢谢你的意见!我尝试了使用json编码的php数组,当我按照action=“newsletter.php”和method=“post”:正常提交表单时效果很好,但我似乎一直使用AJAX,现在甚至无法使用简化版本将数据发布到数据库:$(“#sub”).submit(函数(){event.preventDefault();$.post(“newsletter.php”,{email:$(“#email”).val()});希望我能尽快让它工作起来。嘿,Juri。让我们调试一下。这个代码在控制台打印出来是什么?$.post(“newsletter.php”,一个函数(数据){console.log(数据)});您在chrome中用ctrl+shift+JI打开javascript控制台之前尝试过回显答案,但由于附加了$error,因此如果有多个错误,我无法让它同时显示所有错误部分。数组解决方案应该可以解决该问题。感谢您的输入!使用php的服务器端现在可以工作了,我只需要找出在ajax调用中,我遇到了一个错误,无法让它正常工作,甚至无法将数据发布到服务器。$(“#sub”).submit(函数(){event.preventDefault();$.post({newsletter.php”,{email:$(“#email”).val());很高兴您的解决方案能够工作!:)希望我的解决方案能尽快完成。
    $("#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");
                }
            }
        });
    });
request.done(function (response, data) {
                   $('#add--response').html(response);
});
die("Success! Whatever text you want here");