-1

当用户选择 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();
        }

我尝试/查看的其他内容:

- 我看到一些帖子暗示 Response.Close() 需要被注释掉,但我的任何页面上都没有。

- 其他建议提到 Chrome 不能很好地处理异步调用这一事实 - 这些是什么以及我会在我的代码中在哪里进行更改?

-另一篇文章提到 Chrome 不能很好地处理 jsonp(请注意,这在上周的 Chrome 上运行良好,突然间,没有干扰,停止工作)。同样,我找不到对 jsonp 的任何引用,所以假设不是这样。

我还尝试在调用 datatype:json 之后添加以下 async:false 以查看它是否像下面那样工作

   dataType: "json",
   async:false,

这也不起作用

最后要尝试的是完全删除或注释掉 dataType:"json" ,但没有运气。

** 控制台中的非常有趣的错误日志**

另一个特点是,在CHROME浏览器中运行控制台开发工具错误日志(它不起作用)没有错误

但是,在 CHROME BETA 中运行控制台错误日志(它工作正常),错误是:

    1.

qYZF6oIZtfc:1 解析标头 X-XSS-Protection 时出错:1;模式=块;report= https://www.google.com/appserve/security-bugs/log/youtube:报告 URL 与第 22 位字符的页面的方案、主机和端口不同。将应用默认保护。

: 报告 URL 与第 22 位字符的页面的方案、主机和端口不同。将应用默认保护。

  1. 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>

几乎......更新! 在一个有用的建议将#password(ajax)更改为其他内容以防它是保留字之后,我尝试了......它似乎可以暂时在我的chrome版本中工作,但在移动设备上仍然存在相同的错误!我后来刷新了,然后它也停止在加载的 Chrome 版本上工作了!

此外,另一个人让我知道它在 chrome 上适用于他(即使没有 ajax 保留字更改),但他的 chrome 有一个添加阻止程序,所以这可能是一个进一步的线索。

David J(谢谢)建议这可能是保护站点的问题,因此可以通过 cloudflare 选择。

有什么想法吗?非常感激。

4

1 回答 1

1

我在这里有一个类似的问题。

Jquery Mobile +php 表单提交“data-ajax="false" 不起作用

解决方案:

  1. 页面中有多个具有相同 id 的 div。我重写了它们。

  2. 表格没有自己的 ID,所以我添加了。

  3. 我在表单元素中添加了 data-ajax="false"。

  4. <?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>(!!!) 我从表单元素中删除了 action=" "

我希望它有帮助

于 2018-03-27T09:53:30.980 回答