javascript - 为什么我的页面在表单提交时不刷新?

标签 javascript php json

我制作了一个简单的测验应用程序,只需要回答一个问题;当用户提交表单时,答案将发布到 MySQL 数据库中。然后运行一个函数来执行数据库查询并将数据库表中的数据转换为 JSON,然后我使用 D3 脚本将其可视化。

完整代码是here on github我在下面包含了片段。

我的问题:index.php 页面首先加载, a D3 script takes the JSON and builds a small bar chart which is displayed next to the from .截图为here .

我遇到的问题是,在用户提交表单后,虽然数据库已正确更新,但页面并未刷新。这意味着 JSON 和条形图未更新。

我必须手动刷新 (command-r) 才能看到正确的(更新的)可视化。

我想要完成的事情:在按下“提交”时让图表刷新,以便将更新的结果呈现给用户。

我不知道我做错了什么,可以使用一个指针来判断我是否需要查看 PHP 或 JavaScript 端来刷新表单上的图表(以及重新加载更新的 JSON 的页面)提交。

索引.php:

<form action="form.php" method="post">
     <fieldset>
     <legend>Choose your favourite option:</legend>
     <label>Susan <input type="radio" name="author" id="Susan" value="Susan"></label><br/>
     <label>Camile <input type="radio" name="author" id="Camile" value="Camile"></label><br/>
     <input type="submit" value="Save" />
    </fieldset>
 </form>

主要.js

 var ele = document.getElementById("form");

  if(ele.addEventListener){
    ele.addEventListener("submit", reload, false);  //Modern browsers
  } 
  else if (ele.attachEvent){
    ele.attachEvent('onsubmit', reload);            //Old IE
  }

  function reload() {
    window.location.reload();
    console.log("reloaded");
    drawChart();
  };

表单.php

 include "toJson.php";
 $link = mysqli_connect("localhost", "root", "root", "quiz");

  if (!$link) {
  die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error());
  }

  $update = "INSERT INTO `quiz`.`answers` (`name`) VALUES ('" . mysqli_real_escape_string($link, $_POST['author']) .  "')";

  mysqli_query($link, $update);

  updateJson();

  mysqli_close($link);

toJson.php

$location = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: " . $location);

function updateJson () {

  $link = mysqli_connect("localhost", "root", "root", "quiz");

  if (!$link) {
    die('Connect Error (' . mysqli_connect_errno() . ')' . mysqli_connect_error());
   }

  $result = mysqli_query($link, "SELECT * FROM `answers`");

  $arr = array();

  while($row = mysqli_fetch_array( $result )) {
  $arr[] = $row;
  print_r($row);
  echo "<br/>";
 }

 //write to json file
 $fp = fopen('data.json', 'w');
 fwrite($fp, json_encode($arr));
 fclose($fp);

  mysqli_close($link);

  }

  updateJson();

最佳答案

强制 javascript 重新加载,以防它试图读取缓存或其他东西:

window.location.reload();

window.location.reload(true);

forcedReload Is a Boolean flag, which, when it is true, causes the page to always be reloaded from the server. If it is false or not specified, the browser may reload the page from its cache.

关于javascript - 为什么我的页面在表单提交时不刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312355/

相关文章:

javascript - Three.js - 释放内存

linux - 如何查看哪个 PHP 脚本消耗的内存最多?

javascript - 格式化 JSON 对象并向结构添加新键

java - Twitter4j 获取推文的 JSON 格式

javascript - 无法将数据从跨域 json 分配给 Ajax 中的变量

javascript - JSfiddle 上的 Angular 示例

javascript - 如何在大型对象数组中乘以某些列/字段?

javascript - 是什么导致一个 D3.js 图表与同一页面上的另一个图表发生冲突?

php - 带数组变量的 WordPress WP_Query 术语

php - 关于在 PHP 中包含 html 页面的问题