【发布时间】: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.js中success: 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()来解决问题。 . 祝你有美好的一天:)