【问题标题】:Return success/failure variable with ajax from php script使用 ajax 从 php 脚本返回成功/失败变量
【发布时间】:2015-06-14 09:52:38
【问题描述】:

我是一个真正的新程序员,正在为一项我现在正在努力并尝试了几天的任务而苦苦挣扎。

我搜索了 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 已安装并正在运行。

【问题讨论】:

  • 显示你的错误信息。
  • 使用回声伴侣。回声 $message;

标签: php jquery mysql ajax twitter-bootstrap


【解决方案1】:

$.ajax 错误函数在连接错误或找不到请求的页面时被调用

您必须使用 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
    }
});

祝你的项目好运

【讨论】:

  • 感谢您的意见!我尝试了使用 json 编码的 php 数组,当我按照 action="newsletter.php" 和 method="post" 正常提交表单时,它工作正常 :) 但我似乎坚持使用 AJAX,甚至无法让它工作现在使用简化版本将数据发布到数据库: $("#sub").submit(function (){ event.preventDefault(); $.post("newsletter.php", {email: $(" #email").val() }); 希望我能尽快完成这项工作。
  • 嘿朱里。让我们调试一下。在控制台中打印出的这段代码是什么? $.post("newsletter.php", a , function (data) {console.log(data)});您使用 ctrl+shift+J 在 chrome 中打开 javascript 控制台
【解决方案2】:

您需要将您的消息echo 发送回您的 AJAX。在您的 AJAX 成功中,您的 PHP 代码中没有消息返回到 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;
            }
        }
    } 

【讨论】:

  • 我之前尝试过回显答案,但由于 $error 被附加,如果有多个错误部分,我无法让它一次显示所有错误部分。数组解决方案应该可以解决这个问题。
【解决方案3】:

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

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

【讨论】:

  • 感谢您的意见!带有 php 的服务器端现在可以工作了,我只需要弄清楚 ajax 调用,我有一个错误,无法让它正常工作,甚至无法将数据发布到服务器。 $("#sub").submit(function (){ event.preventDefault(); $.post("newsletter.php", {email: $("#email").val() }); 很高兴你的解决方案有效!:) 希望我的也很快。
【解决方案4】:

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

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 编码,然后显示在一个跨度中,该跨度会根据引导类的危险或成功而改变颜色。

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

【讨论】:

    【解决方案5】:

    我在我的 ajax 上使用它

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

    这在 PHP 上

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

    【讨论】:

      猜你喜欢
      • 2018-05-18
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2014-06-26
      相关资源
      最近更新 更多