AJAX POST + FormData成功无法使用php echo

时间:2017-12-17 23:47:21

标签: php jquery ajax forms

Inbefore:对不好的头衔感到抱歉,无法弥补合适的头衔。

目前我正在开发一个基于网络,以用户为中心的电影和动漫信息池,用户可以通过登录和提交表单来自己填充数据库。 由于它是我的第一个项目,包括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提交的唯一区别是他们不使用jQuerys" FormData"因为不需要上传文件。

每当" registrationForm"提交相应的.php被称为罚款。数据库填充正确,但" location.href"虽然.php回应了成功"但是没有被调用。相反,警报包括"成功"弹出,因此它会跳转到最后一个else子句,同时警告应该由先前的if子句处理的字符串。对于" wrongFileOrSize"这是相同的。和"重复"。

Image: Popup after submitting form

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

在没有ajax的情况下提交以下.php页面只显示回声,所以除了比较ajax和#39;所需的字符串之外别无其他。成功:功能(e)到php的回声。

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

老实说,我完全失去了这一点(特别是因为它为所有其他人提交了工作)。为什么ajax从php获取正确的字符串,甚至通过 alert(e)显示它们,但是无法将它们与之前在其他if-clause中使用的字符串进行比较并显示正确的警报/更改位置?

我尝试了什么:" ==="而不是" ==&#34 ;;关闭php通知和错误以确保只留下作为字符串的回声;改变回声打印; json_encode而不是纯回声;删除表单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。

1 个答案:

答案 0 :(得分:1)

字符串empty中有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指出的那样。