gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:37:25 25 4
gpt4 key购买 nike

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

现在,我正在开发一个基于网络、以用户为中心的电影和动漫信息池,用户可以通过登录和提交表单自行填写数据库。由于这是我的第一个项目,包括 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com