我是新开发者。我已经阅读了很多关于我的主题的问题,我看到了很多有趣的答案,但不幸的是,我找不到解决我的问题的方法。
我有一个简单的HTML格式和<div id="comment"></div>
(如果没有任何内容传递给用户,则为空)。这个DIV应该为用户提供更新,例如Wrong Username or Password!
。该表单通过PHP和MySQL处理。
...
$result = mysqli_query($idConnect, $sql);
if (mysqli_num_rows($result) > 0) {
mysqli_close($idConnect);
setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days
header("Location: ../main.html");
} else {
//Please update the DIV tag here!!
}
...
我试图从jQuery(使用AJAX)“读取”PHP,但我是否没有解决方案,或者不能这样做...我在jQuery中使用了这个(#login
是表格的名称):
$("#login").submit(function(e){
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
$.ajax({
url : formURL,
type: "POST",
data : postData,
success:function(data) {
$("#comment").replaceWith(data); // You can use .replaceWith or .html depending on the markup you return
},
error: function(errorThrown) {
$("#comment").html(errorThrown);
}
});
e.preventDefault(); //STOP default action
e.unbind();
});
但是如果凭据错误,我想用一些消息更新DIV标记#comment
。但我不知道如何更新DIV,考虑到PHP正在处理表单...
提前致谢! :)
答案 0 :(得分:3)
为了让AJAX工作,PHP必须从AJAX调用中返回echo
:
if (mysqli_num_rows($result) > 0) {
mysqli_close($idConnect);
setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days
echo 'good';
} else {
//Please update the DIV tag here!!
echo 'There is a problem with your username or password.';
}
但是这不会出现在error: function
中,因为当AJAX本身出现问题时会使用该函数。此文本将在成功回调中返回,因此您必须在那里更新div:
success:function(data) {
if('good' == data) {
// perform redirect
window.location = "main.html";
} else {
// update div
$("#comment").html(data);
}
},
此外,由于您使用AJAX调用PHP,header("Location: ../main.html");
将无效。您需要根据状态为成功回调添加window.location
。
答案 1 :(得分:0)
首先,假装使用Ajax将表单数据发送到PHP。所以你的客户端(HTML)必须通过Ajax完全通信。进行身份验证后,您需要发送一个&#34; Ajax sign&#34;给客户。
$result = mysqli_query($idConnect, $sql);
if (mysqli_num_rows($result) > 0) {
mysqli_close($idConnect);
setCookie("myapp", 1, time()+3600 * 24 * 60); //60 days
echo 'true';//it's better for using json format here
// Your http header to redirect won't work in this situatition
// because the process is control by javascript code. Not PHP.
} else {
echo "false";//it's better for using json format here
}
//the result is either true or false, you can use json to send more details for client used. Example: "{result:'false', message:'wrong username'}";
// use PHP json_encode(Array(key=>value)) to convert data into JSON format
最后,你必须检查&#34; Ajax标志&#34;在您的js代码中:
$("#login").submit(function(e){
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
$.ajax({
url : formURL,
type: "POST",
data : postData,
success:function(data) {
// You can use `data = JSON.parse(data)` if the data format is JSON
// Now, data.result is available for your checked.
if (data == 'true')
window.location.href = "main.html";
else
$("#comment").html('some message if the credentials are wrong');
},
error: function(errorThrown) {
$("#comment").html('Other error you get from XHTTP_REQUEST obj');
}
});
e.preventDefault(); //STOP default action
e.unbind();
});