10

我正在尝试使用 jquery ajax 调用将用户添加到数据库中。用户可以很好地添加到数据库中,但是 ajax 总是返回错误。我也不确定如何检索特定错误。下面是我的代码、表单、php 和 jquery。

这是jquery

$(document).ready(function() {

    //ajax call for all forms. 
    $('.button').click(function() {
        var form = $(this).closest('form');
        $.ajax({
            type: "POST",
            url: form.attr('data'),
            dataType: 'json',
            data: form.serialize(),
            success: function (response) {
                alert('something');
            },
            error: function() {
                alert('fail');
            }
        });
    });
  });

这是PHP

<?php
include 'class_lib.php';

if(isset($_POST['username'])) {
    $user = new Users;
    $user->cleanInput($_POST['username'], $_POST['password']);
    if($user->insertUser()) {
        echo json_encode('true');
    } else {
        echo json_encode('false');
    }
}

这是HTML

<div id='newUser' class='tool'>
    <h3>New User</h3>
    <form method='post' name='newUser' data='../php/newUser.php'>
        <span>Username</span><input type='text' name='username'><br>
        <span>Password</span><input type='password' name='password'>
        <input type='submit' name='submit' class='button' style='visibility: hidden'>
    </form>
    <span class='result'> </span>
</div>
4

6 回答 6

37

@Musa,上面你提到过

我的猜测是它的解析错误,尝试删除dataType:'json',看看它是否有效

你绝对解决了我遇到的问题!我的 ajax 发布请求与上面类似,它只是不断返回到“错误”部分。虽然我使用 firebug 检查,但状态是 200(ok) 并且没有错误。

删除 'dataType:json' 为我解决了这个问题。非常感谢!

于 2013-10-17T05:21:51.860 回答
8

原来我必须添加async: false到 $.ajax 函数。它没有从 php.ini 得到响应。

于 2013-09-18T11:33:58.693 回答
6

我知道这是一个老问题,但我刚刚遇到了这样一个奇怪的情况(jquery ajax 在直接执行时返回成功,但在附加到按钮时返回错误,即使服务器响应为 200 OK

并发现form标签内有按钮会导致 JQuery 总是返回错误。只需更改form标签即可div解决问题。

我相信 JQuery 假设通信应该是形式编码的,即使你说它是application/json.

尝试将按钮移到表单之外,看看会发生什么...

于 2015-05-02T19:08:22.747 回答
2

我在那里遇到了同样的问题和发现。问题一直是我的 jQuery 版本,我使用的是 jquery 版本(jquery-1.10.2.js),但这个版本不是 Ajax stablish。所以,我改变了(jquery-1.8.2.js)的版本,这个奇迹发生了。

祝你好运!

于 2014-03-20T12:45:20.383 回答
1

您应该为成功响应指定状态代码 200。

<?php
http_response_code(200);
?>

见这里: http: //php.net/manual/en/function.http-response-code.php

于 2013-09-18T00:47:08.373 回答
1

第一个解决方案

尝试dataType像这样在您的js文件中删除:

$(document).ready(function() {
    $('.button').click(function() {
        var form = $(this).closest('form');
        $.ajax({
            type: "POST",
            url: form.attr('data'),
            data: form.serialize(),
            success: function (response) {
                alert('something');
            },
            error: function() {
                alert('fail');
            }
        });
    });
});

第二种解决方案

像这样向 AJAX 发送一个真正干净的 JSON:

PHP

if(isset($_POST['username'])) {
    $user = new Users;
    $user->cleanInput($_POST['username'], $_POST['password']);
    if($user->insertUser()) {
        $error = [
            "title"=> 'true',
            "body"=> 'some info here ... '
        ];
        echo json_encode($error);
    } else {
        $error = [
            "title"=> 'false',
            "body"=> 'some info here ... '
        ];
        echo json_encode($error);
    }
}

JavaScript

$(document).ready(function() {
    $('.button').click(function() {
        var form = $(this).closest('form');
        $.ajax({
            type: "POST",
            url: form.attr('data'),
            dataType: 'json',
            data: form.serialize(),
            success: function (data) {
                let x = JSON.parse(JSON.stringify(data));
                console.log(x.title);
                console.log(x.body);
            },
            error: function() {
                //code here
            }
        });
    });
});
于 2021-08-09T16:19:50.260 回答