Ajax call / javascript - 在IE,Firefox和Safari上工作正常,但在Chrome

时间:2018-03-25 08:59:36

标签: javascript php ajax google-chrome

我在网站上有以下页面,当用户选择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错误日志(工作正常),错误是:

    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. 我想知道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选择。

      有什么想法?非常感激。

1 个答案:

答案 0 :(得分:1)

我在这里有类似的问题。

Jquery Mobile +php form submit "data-ajax="false" not working

解决方案:

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

  2. 表格没有自己的ID,所以我补充说。

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

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

  5. 我希望它有所帮助