php - AJAX POST+FormData 成功无法与 php echo 一起使用

标签 php jquery ajax forms

之前:抱歉,标题不好,无法编出合适的标题。

现在,我正在开发一个基于网络、以用户为中心的电影和动漫信息池,用户可以通过登录和提交表单自行填写数据库。 由于这是我的第一个项目,包括 php、sql 和 ajax+jquery,因此有时可能没有考虑最佳实践,对此感到抱歉。

现在问题来了:我确实有用于登录、注册、删除帐户和注册电影/动漫的表单。所有这些表单都通过ajax提交,以确保易于处理错误警报。

AJAX/jQuery

示例:deleteUser.js(工作正常)

$(document).ready(function() {
$("#deletion").submit(function(e) {
    e.preventDefault(), $.ajax({
        type: "POST",
        url: "/include/userDB/deleteUser.php",
        data: $(this).serialize(),
        success: function(e) {
            if(e == "success") {
                    location.href = "/html/deleted.html"
            } else if(e == "nologin") {
                    alert("Bitte einloggen")
            } else if(e == "wronglogin") {
                    alert("Bitte mit dem zu löschenden Account einloggen")
            } else {
                    alert("Benutzername oder Passwort falsch")
            }
        }
    })
})});

至于我的电影/动漫注册:ajax-success 在registerMovani.js 上无法正常工作:

$(document).ready(function() {
    $("#registrationForm").submit(function(e) {
            e.preventDefault(), $.ajax( {
                    url: "/include/movaniDB/registerMovani.php",
                    type: "POST",
                    enctype: "multipart/form-data",
                    data: new FormData(this),
                    processData: false,
                    contentType: false,
                    success: function(e) {
                            if(e == "success") {
                                    location.href = "/html/success.html"
                            } else if(e == "wrongFileOrSize") {
                                    alert("Falsche Dateiendung oder Datei zu groß")
                            } else if(e == "duplicate") {
                                    alert("Eintrag bereits vorhanden")
                            } else if(e == "error") {
                                    alert("Systemfehler")
                            } else {
                                    alert(e)
                            }
                    }
            })
    })});

与我的其他 ajax 提交的唯一区别是它们不使用 jQuery“FormData”,因为不需要上传文件。

每当提交“registrationForm”时,都会调用相应的 .php 文件。数据库已正确填充,但尽管 .php 回显“成功”,但未调用“location.href”。相反,会弹出一个包含“成功”的警报,因此它会直接跳转到最后一个 else 子句,同时警告应由前面的 if 子句处理的字符串。这对于“wrongFileOrSize”和“duplicate”是相同的。

Image: Popup after submitting form

registerMovani.php 中的回显拼写正确。

在不使用ajax的情况下提交以下.php页面仅显示回显,因此除了比较ajax的成功所需的字符串之外不应该有任何其他内容:function(e)与php的回显。

Image: .php echo after submitting form (in this example: duplicate instead of success)

老实说,我在这里完全不知所措(特别是因为它适用于所有其他提交)。为什么 ajax 从 php 获取正确的字符串,甚至通过 alert(e) 显示它们,但无法将它们与其他 if 子句中之前使用的字符串进行比较并显示正确的警报/更改位置?

我尝试过:“===”而不是“==”;关闭 php 通知和错误以确保仅留下回显字符串;将 echo 更改为打印; json_encode 而不是纯 echo;删除表单 enctype 并使用 $(this).serialize() 而不是 FormData,重新启动服务器并重新启动所有 php、nginx 服务。

PHP

最后但并非最不重要的一个 .phps“echo-syntax”示例:

if (preg_match('/^Duplicate entry/', $sth->errorInfo()[2])) { //Wenn der Eintrag schon existiert und der Fehler daher rührt
            echo ('duplicate');
            exit();
    }
    else{ //Wenn ein anderer Fehler mit dem Statement aufgetreten ist
            echo ('error');
            exit();
    }

正如您所看到的,除了相应的回显之外,没有其他任何东西,通常应该可以通过 ajax 的成功调用来识别。

感谢您提前提供的帮助和时间。

LinkeyZ。

最佳答案

字符串e中有一个字符。通过添加这行代码进行确认:

success: function(e) {
        alert(e + ' ' + e.length);           <--- This line
        if(e == "success") {
               location.href = "/html/success.html"

在文件registerMovani.js中。

警报的输出:

duplicate 10

要修复此问题,请改用:

success: function(e) {
    e = e.trim()          <---- This
    if(e == "success") {
           location.href = "/html/success.html"

正如@Mohamed-Yousef 所指出的。

关于php - AJAX POST+FormData 成功无法与 php echo 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860564/

相关文章:

javascript - 如何检查选择框是否包含特定类的选项?

javascript - 验证动态添加的输入字段

jQuery AJAX post 不工作,但适用于curl

php - 如何在环境变量即路径中添加多个php变量

php - 通过 API 保护来自 Android 应用程序的 GET 请求

PHP计算两个日期之间的办公时间

javascript - 添加文本框和下拉值(数学)

javascript - Ajax 表单未在 Chrome 上提交

javascript - 使用 html 5 本地存储传递属性值

php - 这个php函数应该递归运行吗?