我在自己的网站上有一个登录表单。
我通过普通JavaScript AJAX请求将userdate发送到PHP后端,后端正在检查凭据。
这适用于我在PC和iPad上的所有浏览器。
我的问题出现在我的Android设备上(我在那里使用Chrome和标准浏览器)。
问题是,我必须发送2次 AJAX-request 才能得到答案。
为了证明这一点:我在发送请求后发出警报并在回答回调函数内发出警报。如果我发出第一个请求,则只会弹出第一个警报。如果我第二次发送,第二个警告也会弹出。
此问题是否存在已知错误(解决方法)?
我认为,代码不是必需的,因为我没有做任何特别的事情,但是你已经拥有了它。
代码段(纯JavaScript):
function loginStart(strURL, myForm, callback)
{
xmlhttpPostForm(strURL, myForm, callback);
alert("sent out");
}
function loginEnd(result)
{
alert("returned");
}
function xmlhttpPostForm(strURL, myForm, callback) {
var xmlHttpReq = false;
var self = this;
if (window.XMLHttpRequest) {
self.xmlHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
self.xmlHttpReq.open('POST', strURL, true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
callback(self.xmlHttpReq.responseText);
}
else if (self.xmlHttpReq.status != 200){
callback("Unknown error occured.");
}
}
self.xmlHttpReq.send(getquerystring(myForm));
}
PHP-Backend(删除功能)
<?php
$retval = array();
$retval['msg'] = "Nothing special to minimize error-sources";
$retval['success'] = true;
echo json_encode($retval);
?>
表格:
<form method="post" name="login_form" onsubmit="loginStart('includes/ajax_login.php', this, loginEnd); return false;">
<table id="login">
<tr>
<th colspan="2" class="center">Login</th>
</tr>
<tr>
<td class="right">Username</td>
<td class="left"><input id="inEmail" type="text" name="email"></input></td>
</tr>
<tr>
<td class="right">Password</td>
<td class="left"><input id="inPass" type="password" name="password"></input></td>
</tr>
<tr>
<td class="center"><input type="submit" value="Login" /></td>
<td class="left"><img class="loadbar" id="loginloader" src="images/loader-bar.gif"/></td>
</tr>
</table>
</form>
编辑:根据@Vivasaayi的要求,我添加了一个额外的提醒。
self.xmlHttpReq.onreadystatechange = function() {
alert("Returned: " + self.xmlHttpReq.readyState + " " + self.xmlHttpReq.status);
if (self.xmlHttpReq.readyState == 4) {
......
在好的情况下:
警报:退回:2 200 退回:3 200 退回:4 200
在最坏的情况下:
首先点击: 没有
第二次点击: 提醒:退回:2 200 退回:3 200 退回:4 200 退回:4 200