没有使用 mamp 获得 ajax 成功响应

Posted

技术标签:

【中文标题】没有使用 mamp 获得 ajax 成功响应【英文标题】:Not Getting ajax success response using mamp 【发布时间】:2019-04-22 06:10:34 【问题描述】:

由于某种原因,我没有收到 AJAX 调用的回复。我已经使用 Chrome 和 Firefox 中的控制台来监控这一点,但我只能看到表单发送的内容。我正在使用 MAMP 并没有在实时服务器上尝试过,但我需要它在 MAMP 中工作。我已经尝试了很多人们从我在 *** 中发现但已知的类似问题提出的建议,请帮助!

<form id="signup_submit" method="post" action="AJAX/signup.php">
                    <div class="form-group show-progress">

                    </div>
        <div class="form-group">
                    <input type="text" name="firstname" id="firstname" class="form-control" autocomplete="firstname" placeholder="Enter First Name...">
                    <span class="firstname-error error"></span>
                    </div><!-- form-group -->
                    <div class="form-group">
                    <input type="text" name="surname" autocomplete="surname" id="surname" class="form-control" placeholder="Enter Surname...">
                    <span class="surname-error error"></span>
                    </div><!-- form-group -->
                    <div class="form-group">
                        <input type="email" name="email" id="email" autocomplete="email"  class="form-control" placeholder="Enter Email...">
                        <span class="email-error error"></span>
                    </div><!-- form-group -->
                    <div class="form-group">
                        <input type="password" name="password" autocomplete="password"  id="password" class="form-control" placeholder="Choose Password...">
                        <span class="password-error error"></span>
                    </div><!-- form-group -->
                    <div class="form-group">
                        <input type="password" id="confirm" name="confirm" autocomplete="confirm"  class="form-control" placeholder="Confirm Password...">
                        <span class="confirm-error error"></span>
                    </div><!-- form-group -->
                    <div class="form-group">
                        <button type="submit" id="submit" >Create Account</button>
                    </div><!-- form-group -->
                    <div class="form-group">
                        <a href="#" id="login">Already have an account?</a>
                    </div>
                </form><!-- form -->

signup.js

    $(document).ready(function()
    $('form').submit(function(e)
        e.preventDefault();
        var data = $('#signup_submit').serialize();
        console.log(data)
        $.ajax(
            type:'POST',
            URL: 'AJAX/signup.php',
            data: data,
            dataType: 'json',
            encode:true,
            success: function(d)
                d = JSON.parse(d);
                console.log(d.testjson);
                if(d.success)
                    $('#signup_submit').append('<div>'+d.message+'</div>');
                else
                    if(d.errors.firstname)$('.firstname-error').show();$('.firstname-error').html(d.errors.firstname);
                    if(d.errors.surname)$('.surname-error').show();$('.surname-error').html(d.errors.surname);
                    if(d.errors.email)$('.email-error').show();$('.email-error').html(d.errors.emailname);
                    if(d.errors.password)$('.password-error').show();$('.password-error').html(d.errors.password);
                    if(d.errors.confirm)$('.confirm-error').show();$('.confirm-error').html(d.errors.confirm);
                
            
        )
    )

)

注册.php

<?php 
$errors = array();
$response = array();

if(empty($_POST['firstname']))$errors['firstname'] = 'First Name Is Required!';
if(empty($_POST['surname']))$errors['surname'] = 'Surname Is Required!';
if(empty($_POST['email']))$errors['email'] = 'Email Address Is Required!';
if(empty($_POST['password']))$errors['password'] = 'Password Is Required!';
if(empty($_POST['confirm']))$errors['confirm'] = 'Please Confirm Your Password!';

$response['errors'] = $errors;

if (!empty($errors))

    $response['success'] = false;
    $response['message'] = 'FAIL!';
else
    $response['success'] = true;
    $response['message'] = 'SUCCESS!';  





 ?>  

【问题讨论】:

你得到什么响应码? 404、500,还有别的吗? 查看我关于调试 AJAX 调用的帖子:***.com/a/21617685/2191572 没有没有收到任何错误消息,这就是我在控制台中看到的全部 firstname=&surname=&email=&password=&confirm= 查看控制台的网络选项卡并查找响应/状态代码列。你需要弄清楚这个调用是否会影响你的后端代码 谢谢 MonkeyZeus 我已经试过了,但除了上面没有别的 【参考方案1】:

您永远不会在 signup.php 文件中返回任何内容。您需要 json_encode 并在脚本末尾使用 echoexit


<?php

$errors = array();
$response = array();

if (empty($_POST['firstname'])) $errors['firstname'] = 'First Name Is Required!';
if (empty($_POST['surname'])) $errors['surname'] = 'Surname Is Required!';
if (empty($_POST['email'])) $errors['email'] = 'Email Address Is Required!';
if (empty($_POST['password'])) $errors['password'] = 'Password Is Required!';
if (empty($_POST['confirm'])) $errors['confirm'] = 'Please Confirm Your Password!';

$response['errors'] = $errors;

if (!empty($errors)) 
    $response['success'] = false;
    $response['message'] = 'FAIL!';
 else 
    $response['success'] = true;
    $response['message'] = 'SUCCESS!';


// Return data here
exit(json_encode($response));

?>

编辑:保留上面的 PHP exit,而是使用 jQuery.post() 而不是 jQuery.ajax(),因为它比混淆内容类型更短、更干净、更简单。它还应该解决您的问题:

$(document).ready(function()
    $('form').submit(function(e) 
        e.preventDefault();
        var data = $('#signup_submit').serialize();

        console.log("data:");
        console.log(data);

        $.post("AJAX/signup.php", data, result => 
            console.log("result:");
            console.log(result);

            result = JSON.parse(result);

            if (result.success) 
                $('#signup_submit').append('<div>'+result.message+'</div>');
             else 
                if (result.errors.firstname) $('.firstname-error').html(result.errors.firstname).show();
                if (result.errors.surname) $('.surname-error').html(result.errors.surname).show();
                if (result.errors.email) $('.email-error').html(result.errors.email).show();
                if (result.errors.password) $('.password-error').html(result.errors.password).show();
                if (result.errors.confirm) $('.confirm-error').html(result.errors.confirm).show();
            
        );
    );
);

【讨论】:

嗨,谢谢,但我已经尝试过了,并且 echo json_encode($response);还是没有反应 @mattyt81 使用$.post 而不是$.ajax 查看我的更新答案,希望能解决您的问题! 我已经尝试了上面的代码,但它仍然无法正常工作,还在第 13 行收到错误消息,即 result = JSON.parse(result); 哎呀,你复制了我留下的$.post 中的t.php 吗?将 t.php 替换为您的 AJAX/signup.php 还有什么console.log(result);打印到控制台?【参考方案2】:

删除 dataType: 'json' 并尝试。在回显结果之前还要设置标题,如下所示:

header('Content-type:application/json');
echo json_encode($response);

【讨论】:

以上是关于没有使用 mamp 获得 ajax 成功响应的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中使用 vue.js 时在 $.ajax 中获得成功或完成响应的问题

如何获得我的AJAX响应以执行点击事件?

Jquery 无法从 WCF REST 服务获得响应

使用 $.ajax jsonp 请求时,Nodejs api 响应未成功

即使成功后也没有从 PayPal 获得成功响应

Django - Ajax 注册