通过ajax将数据传递给php并返回

时间:2014-07-22 23:47:54

标签: php jquery ajax

如果用户需要在forgetForm.php中重置他们的电子邮件,我有一个基本表单:

<script src="js/forgotPwd.js" type="text/javascript"></script> 
 ..... <edited for brevity> .....

<form class="forgot active" id="forgotPwdForm" method="post" action="#" autocomplete="off" >
    <h2>Reset Password</h2>

    <div>
        <label>Email</label>
        <input type="email" id="email" name="email"  placeholder="Email" required />
    </div>

    <div>
        <legend><span id="spambot">Are you human?</span></legend>
        <input id="num1" name="num1" readonly="readonly" class="sum" value="<?php echo rand(1,4) ?>" /> + 
        <input id="num2" name="num2" readonly="readonly" class="sum" value="<?php echo rand(5,9) ?>" /> =
        <input id="captcha" name="captcha"  class="captcha" maxlength="2" required />
    </div>


    <div class="bottom">
        <button type="submit" class="button-blue" name="submit">Submit</button>
    </div>

    <div class="messagebox">
            <div class="alert-message"></div>
    </div>
</form>

forgotPwd.js就是这样:

 $("#forgotPwdForm").submit(function() {
        if ($("#forgotPwdForm").valid()) {
            var data = $('#forgotPwdForm').serialize();
            console.log(data);
            $.ajax({
                type: "POST",
                url: "process_forgotPwd.php",
                data: data,
                dataType: "json",
                success: function(msg) {
                    if (msg.result == 1) {
                        $('.messagebox').addClass("success-message");
                        $('.message').slideDown('slow');
                        $('.alert-message').text("Sending reset pwd email ...");
                        $('#forgotPwdForm').fadeOut(5000);
                        window.location = "success.php";
                    } else {
                        $('.messagebox').hide();
                        $('.messagebox').addClass("error-message");
                        $('.alert-message').html(msg.result);
                        $('.messagebox').slideDown('slow');
                    }
                },
                error: function(jqXHR, textStatus, errorThrown) {
                        alert('Error: ' + textStatus + ' ' + errorThrown);
                  }
            });
             return false;
        }

    });

此数据输出到控制台,对我来说很好看:

email=johndoe%40gmail.com&num1=2&num2=6&captcha=8

这正是我在表单上输入的内容。在&#34; process_forgotPwd.php&#34;我运行服务器端验证,然后向用户发送一个带有重置链接的电子邮件(他们没有问题)。在&#34; process_forgotPwd.php&#34;的底部我发送回状态,具体取决于电子邮件是否正确发送:

if (!$mail->Send()) {
    echo json_encode(array('result' => $msg_email_error));
    die();
} else {;
    //header("Content-Type: application/json", true);
    echo json_encode(array('result' => 1));
    exit();
    }

(有人提出了我试图无效的标题行)。当控件返回到forgotPwd.js时,它会抛出此错误:

Error: parsererror SyntaxError: JSON.parse: unexpected character at line 2 column 1 of the JSON data

然而我的数据对我来说很好。我错过了什么?

错误:parsererror SyntaxError:JSON.parse:JSON数据第2行第1列的意外字符

1 个答案:

答案 0 :(得分:0)

dataType: "json",更改为dataType: "text",。您的服务器返回的数据不是有效的JSON。 dataType设置不适用于您发送到服务器的数据,而是适用于服务器返回的数据,这意味着解析错误指的是msg而不是{{1} }

data回调中唯一的陈述是:

success

一旦您确认了要返回的数据的结构,请相应地更新console.log( msg ); 处理程序中的逻辑和success值。