我在网站上有以下页面,当用户选择BEGINNER和00-Intro to Programming时工作正常 - 并输入任意用户名两次(并按提交)
http://www.teachyourselfpython.com/testandtrack_v5/index.php
注意:它在IE,Firefrox,GoogleChromeBETA和Safari上运行得非常好。但它不适用于Chrome - 产生错误“您必须输入测验密码”。没有为此特定测验设置测验密码(在数据库中该字段设置为'0',所以我不知道为什么它首先启动此命令。请注意,一个控制台错误提示该网站应该是HTTPS并且Chrome似乎不喜欢隐藏密码字段(测验密码的输入框仅在测验有密码时显示)
一个建议是,它与 AJAX和Javascript 有关。下面粘贴了一些相关代码。
$("#quiz_form").change(function () {
/* WHEN YOU CHANGE AND SELECT FROM THE SELECT FIELD */
var allbooks = $(this).val(); /* GET THE VALUE OF THE SELECTED DATA */
var dataString = "level=" + allbooks; /* STORE THAT TO A DATA STRING */
$.ajax({ /* THEN THE AJAX CALL */
type: "POST", /* TYPE OF METHOD TO USE TO PASS THE DATA */
url: "get-quiz-by-level.php", /* PAGE WHERE WE WILL PASS THE DATA */
dataType: "json",
data: dataString, /* THE DATA WE WILL BE PASSING */
success: function success(result) {
/* GET THE TO BE RETURNED DATA */
var option = "";
result
.sort(function(a, b) {
return a.quiz_name.localeCompare(b.quiz_name);
})
.forEach(function (quiz, i) {
option += "<option value=\"" + quiz.id + "\">" + quiz.quiz_name + "</option>";
if (i == 0 && quiz.password_quiz != 0) {
$("#password").show();
} else if (i == 0 && quiz.password_quiz == 0) {
$("#password").hide();
}
});
$("#got_quiz").show().html(option);
}
});
});
$("#got_quiz").change(function () {
/* WHEN YOU CHANGE AND SELECT FROM THE SELECT FIELD */
var allbooks = $(this).val(); /* GET THE VALUE OF THE SELECTED DATA */
var dataString = "quiz=" + allbooks; /* STORE THAT TO A DATA STRING */
$.ajax({ /* THEN THE AJAX CALL */
type: "POST", /* TYPE OF METHOD TO USE TO PASS THE DATA */
url: "check_quiz_pass.php", /* PAGE WHERE WE WILL PASS THE DATA */
data: dataString, /* THE DATA WE WILL BE PASSING */
success: function success(result) {
/* GET THE TO BE RETURNED DATA */
if (result == 0) {
$("#password").hide();
} else {
$("#password").show();
}
}
});
});
另一个建议是它与PHP有关。 (粘贴在下面)我将ifelse更改为if else,但这没有任何区别 - 它仍然适用于IE / Safari / Firefox而不是Chrome。
PHP代码
//getting body i.e. questions, options and submit button for the page
//initialize the optput variable
$m_output='';
//Getting the questions from DB here
$m_questions_from_DB = mysqli_query($con,"SELECT * FROM questions WHERE quiz_id='$final_quiz_ID'
");
while (mysqli_num_rows($m_questions_from_DB)<1) {
$user_msg = 'Hey, weird, but it seems there are no questions in this quiz!';
header('location: index.php?user_msg='.$user_msg.'');
exit();
}
if($_POST['consent'] != 1){
$user_msg = 'Hey, You have to consent first to begin the quiz!';
header('location: index.php?user_msg='.$user_msg.'');
exit();
}else if(($_POST['class_name'] == "non" && !empty($_POST['school_pin'])) || ($_POST['class_name'] != "non" && empty($_POST['school_pin']))){
if($_POST['class_name'] == "non"){ echo "aakakakak"; }
$user_msg = 'Hey, You have to insert correct school pin and choose your class'.$_POST['school_pin'].$_POST['class_name'];
header('location: index.php?user_msg='.$user_msg.'');
exit();
}elseif($quiz_pass != '0' && empty($_POST['quiz_password'])){
$user_msg = 'Hey, Enter a correct Quiz password';
header('location: index.php?user_msg='.$user_msg.'');
exit();
}elseif(!empty($_POST['quiz_password']) && $_POST['quiz_password'] != $quiz_pass){
$user_msg = 'Hey, Enter a correct Quiz password';
header('location: index.php?user_msg='.$user_msg.'');
exit();
}
我尝试/看过的其他内容:
- 我看过SO帖子提示需要注释Response.Close(),但我的任何页面上都没有。
- 其他建议提到Chrome不能很好地处理异步调用的事实 - 这些是什么以及我希望在我的代码中更改此内容?
- 另一篇文章提到Chrome浏览器没有很好地处理jsonp(请注意,这在上周的Chrome上工作正常,突然间没有干扰,停止工作)。再一次,我找不到任何对jsonp的引用,所以假设它不是那样。
我还尝试在调用datatype之后添加以下async:false:json以查看它是否像下面一样工作
dataType: "json",
async:false,
这不起作用
最后要尝试的是删除或注释掉dataType:“json”,但没有运气。
**非常有趣的错误记录在控制台**
另一个特点是,在浏览器中运行控制台开发人员工具错误日志 CHROME (它不起作用)有无错误 !!
但是,在CHROME BETA中运行c onsole错误日志(工作正常),错误是:
qYZF6oIZtfc:1解析标题X-XSS-Protection时出错:1;模式=块; report = https://www.google.com/appserve/security-bugs/log/youtube:报告URL与字符位置22处的页面的方案,主机和端口不同。将应用默认保护。
:报告URL与字符位置22处的页面的方案,主机和端口不同。将应用默认保护。
quiz.php:1此页面包含非安全上下文中的密码或信用卡输入。 URL栏中添加了警告。有关详细信息,请参阅...
我想知道2号是否与它有关!但我不知道如何继续。
重要更新
https://developers.google.com/web/updates/2016/10/avoid-not-secure-warn
我发现这个网站无疑对这个问题有了进一步的了解,但是如何着手解决这个错误呢?
最后,这篇文章表明装箱子有问题。
One approach (not working in Chrome)
<select>
<optgroup label="Swedish Cars">
<option id="volvo" onclick="option_click(this.id)">Volvo</option>
<option id="saab" onclick="option_click(this.id)">Saab</option>
</optgroup>
DEMO.
Proper way (Working in all browsers)
<select onchange="option_click(this.value)">
<optgroup label="Swedish Cars">
<option value="volvo" id="volvo">Volvo</option>
<option value="saab" id="saab">Saab</option>
</optgroup>
</select>
NEARLY ..... UPDATE! 在一个有用的建议将#password(ajax)更改为其他内容以防万一它是一个保留字,我尝试了....它出现在我的版本的chrome暂时工作,但在移动设备上仍然是同样的错误!我后来刷新了,然后它也停止了加载版本的Chrome!
另外,另一个人让我知道它对他有用(即使没有ajax保留字更改)但他的chrome有一个添加阻止器,所以这可能是一个进一步的线索。
David J(谢谢)建议这可能是保护网站的问题,所以这可以通过cloudflare选择。
有什么想法?非常感激。
答案 0 :(得分:1)
我在这里有类似的问题。
Jquery Mobile +php form submit "data-ajax="false" not working
解决方案:
页面中有几个具有相同ID的div。我重写了它们。
表格没有自己的ID,所以我补充说。
我在表单元素中添加了data-ajax =“false”。
(!!!)我从表单元素中删除了action =“<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
”
我希望它有所帮助