【问题标题】:AJAX POST+FormData success not working with php echoAJAX POST+FormData 成功不适用于 php echo
【发布时间】:2018-05-31 07:54:44
【问题描述】:

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”和“duplicate”也是一样。

Image: Popup after submitting form

registerMovani.php 中的 echo 拼写正确。

在没有 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 作为字符串留下;将 echo 更改为打印; json_encode 而不是纯回显;删除表单 enctype 并使用 $(this).serialize() 而不是 FormData,重新启动服务器并重新启动所有 php、nginx 服务。

PHP

最后但并非最不重要的 .phps“回声语法”的示例:

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 的成功调用来识别。

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

LinkkeyZ。

【问题讨论】:

  • registerMovani.jssuccess: function(e) { 之后的alert(e) ; 的输出是什么?
  • 您能否尝试其中一种有问题的场景,并在success: function(e) { 之后添加此alert(e + ' ' + e.length); 并发布您得到的结果。
  • 尝试在 ajax 成功函数的第一行使用 .trim() e = e.trim()
  • @Ivan86 alert(e + ' ' + e.length); 显示 duplicate 10 所以确实有一些空间,因为重复只计算 9 个元素。非常感谢! @Mohamed-Yousef 非常感谢!这对我有用。我学到了一段新的有用代码。感谢你们俩的快速和现场帮助 =)
  • 不客气..我确信@Ivan86 需要确保alert(e + ' ' + e.length); 是否有任何空格,他是完全正确的.. 并且使用.trim() 来解决问题。 . 祝你有美好的一天:)

标签: php jquery ajax forms


【解决方案1】:

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

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 指出的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2017-05-13
    • 2017-02-07
    • 2015-12-01
    相关资源
    最近更新 更多