繁体   English   中英

AJAX表单未提交导致错误

[英]AJAX form not submitting that gives error

我在这里有我的AJAX代码

$("#add-student").click(function(e) { 
    e.preventDefault(); 
    formData = $("#student-form").serialize(); 
    if (cleanFormInput()) {
        sendTheInfo(formData);
    } else { 
        shakeForm();
    }
});

function sendTheInfo(formData) { 
    $.ajax({ 
        type: "POST", 
        url: "../classes/ajax/postNewStudent.php",
        data: formData, 
        statusCode: {
            404: function() {
                alert( "page not found" );
            }
        },
        success: function(formData) { 
            console.log("New student submitted:\n" + formData);
        //clearForms();
        },
        error: function(result, sts, err) { 
            console.warn("Connection error:\n" + err + " : " + sts);
            console.log(result);
            shakeForm();
        },
        complete: function() { 
            console.log("Everything complete");
        }
    });
}

始终没有失败会输出此错误: 连接错误:SyntaxError:意外的输入结束:parsererror

但是仍然给出完整的消息: 一切都完成了

更新,PHP代码在这里:

    require '../../core/init.php';
    require '../../classes/Config.php';

    header('Content-Type: application/json');

    if (!empty($_POST)) {

        $id = $_POST["sid"]; 
        $first = $_POST["first"];
        $last = $_POST["last"]; 
        $fav = "0";

        $sql = "INSERT INTO `students` (`id`, `first`, `last`, `active`) VALUES ('{$id}', '{$first}', '{$last}', '{$fav}')";

        $link = mysql_connect(Config::get('mysql/host'),Config::get('mysql/username'),Config::get('mysql/password')) or die("could not connect");;
        mysql_select_db(Config::get('mysql/db'), $link);

        $result = mysql_query($sql, $link);

        if ($result) {
            header('Content-Type: application/json');
            $student_data = $id . $first . $last . $fav;
            echo json_encode($student_data);
        }
    }

我有点困惑,我的Ajax设置错误吗? 还是后端代码中的其他错误? 我正在使用MySQL和jQuery 2.0.3

更新的代码在这里: 这里

删除了我的旧答案。 我认为这不是ajax / javascript错误。 绝对是PHP错误。 这是这行:

$student_data = $id . $first . $last . $fav;
echo json_encode($student_data);

$ student_data不是数组,而是一个字符串。 您需要将数组传递给json_encode函数

我看过你的代码。 我从PHP端看到,您正在发送JSON对象。 但是您没有为响应指定返回数据类型 尝试在ajax调用中添加dataType。 也许那会解决问题

function sendTheInfo(formData) { 
$.ajax({ 
    type: "POST", 
    url: "../classes/ajax/postNewStudent.php",
    data: formData, 
    dataType : 'json',
    statusCode: {
        404: function() {
            alert( "page not found" );
        }
    },
    success: function(formData) { 
        console.log("New student submitted:\n" + formData);
    //clearForms();
    },
    error: function(result, sts, err) { 
        console.warn("Connection error:\n" + err + " : " + sts);
        console.log(result);
        shakeForm();
    },
    complete: function() { 
        console.log("Everything complete");
    }
});
}

应该注意的是,即使后端没有返回结果,Ajax COMPLETE方法也会触发。

complete: function() { 
        console.log("Everything complete");
    } 

因此,即使ajax调用“完成执行”,即使提交失败,它也会显示日志条目。

我也建议不要有2个标头或相同的声明(您有一个顶部,并且在if(result)调用中有一个。

在注释线程中,您指出您正在服务器上工作,而不是在本地工作,因此这意味着您存在一些路径问题。 检查你的

  ../ 

相对路径样式的网址,并确保您拥有相同的基点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM