Javascript Jquery ajax仅对某些用户失败(ajax响应0)
我有一个基于ajax的登录系统。用户输入用户名/密码并提交。这将异步激发到一个php脚本,该脚本验证etc,然后让用户登录或以json格式返回错误消息 问题是ajax调用返回的错误只针对少数用户,而不是大多数用户。更奇怪的是,当我尝试以这些用户的身份登录进行调试时,它在使用我自己的系统时运行良好。这似乎与他们的特定设置有某种联系 为了进行调试,我让jquery ajax错误处理程序在登录失败时通过电子邮件向我发送错误数据(以及一些浏览器信息)。但是我看到的ajax错误是“未定义的” 我不知道如何继续修复或进一步调试它。我已经证明,这与特定版本的浏览器或同一来源的问题无关。如能对此有所了解,将不胜感激。这是我的密码: 更新我已设法将问题缩小到ajax状态响应0。一些浏览器只是在发送前停止进程,但并不一致,这让我相信是某种插件或扩展导致了问题。但这并不是明显的罪魁祸首——noscript、adblocker等Javascript Jquery ajax仅对某些用户失败(ajax响应0),javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个基于ajax的登录系统。用户输入用户名/密码并提交。这将异步激发到一个php脚本,该脚本验证etc,然后让用户登录或以json格式返回错误消息 问题是ajax调用返回的错误只针对少数用户,而不是大多数用户。更奇怪的是,当我尝试以这些用户的身份登录进行调试时,它在使用我自己的系统时运行良好。这似乎与他们的特定设置有某种联系 为了进行调试,我让jquery ajax错误处理程序在登录失败时通过电子邮件向我发送错误数据(以及一些浏览器信息)。但是我看到的ajax错误是“未定义的” 我不知道如何
$('#loginMain').on('submit', '#loginForm, #resetForm', function(e){
e.preventDefault(); //don't submit the actual form
$('#loginExtra').addClass('ajaxloader-circle'); //loading spinner
var type = $(this).attr('id');
var submitType = type.replace('Form', '');
var uploadData = new FormData($("#" + submitType + "Form")[0]); //get the form data
uploadData.append('token', '<?php echo $_SESSION['token']; ?>'); //prevent csrf
jQuery.ajax({
url: 'https://www.example.com/ajaxfiles/loginProcess.php',
data: uploadData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
dataType: 'json',
success: function(data) { //on success, reload or present error message
$('#loginExtra').removeClass('ajaxloader-circle');
if (data['state'] == false) { //show error data if it failed
$('#loginFeedback').html('<div style="color:red; text-align: center;">' + data['msg'] + '</div>'); //output any error messages
$('#loginProcessing').html('');
} else {
$('#signupDynamic').html('Success! Reloading...');
$('#signupFeedback').html('');
$('#signupProcessing').html('');
if (submitType == 'login') { //reload on successful login
var url = window.location.pathname;
var page = url.substr(url.lastIndexOf('/') + 1);
if (page != 'login') {
location.reload();
} else { //logging in on the login page
window.location.href = "https://www.example.com"; //redirect to home
}
} else { //output on succesful reset
$('#loginFeedback').html('<div style="color:green; text-align: center;">' + data['msg'] + '</div>'); //output any error messages
$('#resetForm').html('');
}
}
},
error: function(xhr, textStatus, errorThrown){ //on fail, email me what went wrong
var browser = '<?php echo $_SERVER['HTTP_USER_AGENT']; ?>';
var errorText = textStatus + '|' + xhr.responseText + '|' + xhr.statusText + '|' + xhr.readyState + '|' + errorThrown + '|' + browser;
$.post("https://www.example.com/ajaxfiles/errorTracker.php", {data: errorText, token: '<?php echo $_SESSION['token']; ?>'}, function(data) {
window.location.href = "https://www.example.com/login.php";
}, "text");
}
});
});
$('loginMain')。关于('submit','loginForm','resetForm',函数(e){
e、 preventDefault();//不提交实际表单
$('loginExtra').addClass('ajaxloader-circle');//加载微调器
var type=$(this.attr('id');
var submitType=type.replace('Form','');
var uploadData=newformdata($(“#”+submitType+“Form”)[0]);//获取表单数据
uploadData.append('token','');//防止csrf
jQuery.ajax({
网址:'https://www.example.com/ajaxfiles/loginProcess.php',
数据:上传数据,
cache:false,
contentType:false,
processData:false,
键入:“POST”,
数据类型:“json”,
成功:函数(数据){//成功后,重新加载或显示错误消息
$('loginExtra').removeClass('ajaxloader-circle');
if(data['state']==false){//失败时显示错误数据
$('#loginFeedback').html(''+数据['msg']+'');//输出任何错误消息
$(“#登录处理”).html(“”);
}否则{
$('signupDynamic').html('Success!Reloading…');
$('#signupFeedback').html('');
$('#signupProcessing').html('');
如果(submitType=='login'){//成功登录时重新加载
var url=window.location.pathname;
var page=url.substr(url.lastIndexOf('/')+1);
如果(第页='login'){
location.reload();
}else{//在登录页面上登录
window.location.href=”https://www.example.com“;//重定向到主页
}
}else{//成功重置时的输出
$('#loginFeedback').html(''+数据['msg']+'');//输出任何错误消息
$('#resetForm').html('');
}
}
},
错误:函数(xhr,textStatus,errorshown){//失败时,通过电子邮件告诉我哪里出了问题
var='';
var errorText=textStatus+'|'+xhr.responseText+'|'+xhr.statusText+'|'+xhr.readyState+'|'+errorshown+'|'+browser;
$.post(”https://www.example.com/ajaxfiles/errorTracker.php“,{data:errorText,标记:'},函数(数据){
window.location.href=”https://www.example.com/login.php";
}“文本”);
}
});
});
我将把它作为一个答案发布,因为它太长,不能正确地格式化为注释
我猜问题从这里开始:
uploadData.append('token', '<?php echo $_SESSION['token']; ?>');
有一个简单的方法来检查它。。。只需在顶部添加(在某些情况下可能不起作用):
我能够确认这实际上是由一个我已经排除的跨来源问题引起的 用户不知何故导航到了(一个本不应该触发的重定向到www),这在ajax调用发送到时引起了问题
谢谢你的回答。他们最终帮助我缩小了这个范围。显然是示例代码,所以,真正的代码是
url:'https://www.example.com/ajaxfiles/loginProcess.php“,
cross-origin或home-origin-您声明不存在“同源问题”,但我想知道是否存在跨源问题,而对于某些用户,javascript,umm浏览器问题?用户登录的页面是。请求的ajax文件位于中。就我(可能有限)对交叉/同源的理解而言,这不应该违反同源政策,对吗?谢谢。仍然不确信这不是浏览器问题,但我收到的调试电子邮件显示,至少有两种不同的浏览器类型存在相同的问题。我还使用了最新版本的Firefox(这是其中一款浏览器),并且登录良好。您能否强制创建错误并调试电子邮件为何无法工作。如果代码中有错误,修复它可能会帮助您解决问题。事实证明,这不是问题所在。当ajax请求失败时,用户收到错误代码0,这意味着浏览器甚至没有将请求发送到loginProcess页面。但这并不是特定于一个浏览器版本——两个不同的人使用完全相同的浏览器会有不同的体验。
$.post("https://www.example.com/ajaxfiles/errorTracker.php", {data: errorText, token: '<?php echo $_SESSION['token']; ?>'}, function(data) {
<?php
error_reporting(0);
?>
uploadData.append('token', '<?php echo (isset($_SESSION['token']) ? $_SESSION['token'] : 'SESSION TOKEN IS NOT SET!!!'); ?>');
$.post("https://www.example.com/ajaxfiles/errorTracker.php", {data: errorText, token: '<?php echo (isset($_SESSION['token']) ? $_SESSION['token'] : 'SESSION TOKEN IS NOT SET!!!'); ?>'}, function(data) {
var browser = '<?php echo (isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'USER AGENT NOT DEFINED!'); ?>';