Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery ajax仅对某些用户失败(ajax响应0)_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript Jquery ajax仅对某些用户失败(ajax响应0)

Javascript Jquery ajax仅对某些用户失败(ajax响应0),javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个基于ajax的登录系统。用户输入用户名/密码并提交。这将异步激发到一个php脚本,该脚本验证etc,然后让用户登录或以json格式返回错误消息 问题是ajax调用返回的错误只针对少数用户,而不是大多数用户。更奇怪的是,当我尝试以这些用户的身份登录进行调试时,它在使用我自己的系统时运行良好。这似乎与他们的特定设置有某种联系 为了进行调试,我让jquery ajax错误处理程序在登录失败时通过电子邮件向我发送错误数据(以及一些浏览器信息)。但是我看到的ajax错误是“未定义的” 我不知道如何

我有一个基于ajax的登录系统。用户输入用户名/密码并提交。这将异步激发到一个php脚本,该脚本验证etc,然后让用户登录或以json格式返回错误消息

问题是ajax调用返回的错误只针对少数用户,而不是大多数用户。更奇怪的是,当我尝试以这些用户的身份登录进行调试时,它在使用我自己的系统时运行良好。这似乎与他们的特定设置有某种联系

为了进行调试,我让jquery ajax错误处理程序在登录失败时通过电子邮件向我发送错误数据(以及一些浏览器信息)。但是我看到的ajax错误是“未定义的”

我不知道如何继续修复或进一步调试它。我已经证明,这与特定版本的浏览器或同一来源的问题无关。如能对此有所了解,将不胜感激。这是我的密码:

更新我已设法将问题缩小到ajax状态响应0。一些浏览器只是在发送前停止进程,但并不一致,这让我相信是某种插件或扩展导致了问题。但这并不是明显的罪魁祸首——noscript、adblocker等

$('#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!'); ?>';