简体   繁体   English

发送JavaScript表单后如何重定向页面

[英]how to redirect page after sending javascript form

Hello I have this form that uses js that after you click the the approve button it will change the button to success and send the data, it will run a php script to update the database. 您好,我有这种使用js的表单,在您单击批准按钮后,它将更改按钮为成功并发送数据,它将运行一个php脚本来更新数据库。 That part is working however I would like to reload the page after the information is sent but everything i've tried will not work. 该部分正在工作,但是我想在信息发送后重新加载页面,但是我尝试过的所有方法都无法工作。 Here is what i currently have. 这是我目前拥有的。

js js

$("#approvePirep").on("click", function() {
var a = $(this).data("ppm"), n = $(this).data("pid"), s = $(this).data("pirep-id"), e = $(this);
    $.ajax("includes/ajax/noc/acceptpirep.php?pid=" + n + "&ppm=" + a + "&pirepid=" + s).done(function(a) {
        "1" == a ? e.removeClass("btn-primary").addClass("btn-success") : e.removeClass("btn-primary").addClass("btn-danger");
    }).fail(function() {
        e.removeClass("btn-primary").addClass("btn-danger");
    });
 window.location.href = "https://virtualua.org/ams/index.php?page=noc";
})

php of the information being sent PHP的信息被发送

<?php
require("checkstaff.php");
require("../../logaction.php");

function distance($lat1, $lon1, $lat2, $lon2, $unit = "N") {
    $theta = $lon1 - $lon2;
    $dist = sin(deg2rad((float)$lat1)) * sin(deg2rad((float)$lat2)) + cos(deg2rad((float)$lat1)) * cos(deg2rad((float)$lat2)) * cos(deg2rad((float)$theta));
    $dist = acos($dist);
    $dist = rad2deg($dist);
    $miles = $dist * 60 * 1.1515;

    return ($miles * 0.8684);
}

function getAirportValue($icao, $col) {
  global $pdo;

  $query = $pdo->prepare("SELECT $col FROM airports WHERE icao = ?");
  $query->execute([$icao]);
  return $query->fetchColumn();
}

function ppm($point_value) {
  if ($point_value < "25000") {
    $ppm = 1;
  }
  if ($point_value >= "25000" AND $point_value < "49999") {
    $ppm = 3;
  }
  if ($point_value >= "50000" AND $point_value < "99999") {
    $ppm = 5;
  }
  if ($point_value >= "100000" AND $point_value < "149999") {
    $ppm = 8;
  }
  if ($point_value >= "150000") {
    $ppm = 10;
  }
  return $ppm;
}

function calcPoints($dep, $arr) {

  $dep_lat = getAirportValue($dep, "latitude");
  $dep_lon = getAirportValue($dep, "longitude");
  $arr_lat = getAirportValue($arr, "latitude");
  $arr_lon = getAirportValue($arr, "longitude");

  $pointpermile = ppm($_GET['ppm']);

  $distance = distance($dep_lat, $dep_lon, $arr_lat, $arr_lon, "n");

  return round($distance * $pointpermile);
}

if(isStaff() == true) {
  if(isset($_GET['pid']) && $_GET['pirepid']) {
    $pinfo = $pdo->prepare("SELECT * FROM pireps WHERE id = ?");
    $pinfo->execute([$_GET['pirepid']]);
    $pinfo = $pinfo->fetch(PDO::FETCH_ASSOC);

    $query = $pdo->prepare("UPDATE pireps SET status = 1 WHERE id = ?")->execute([$_GET['pirepid']]);
    $query1 = $pdo->prepare("UPDATE pilots SET hours = hours + ?, points = points + ?, last_airport = ?, flights = flights + 1, lastpirep = UNIX_TIMESTAMP()  WHERE id = ?")->execute([$pinfo['time'], calcPoints($pinfo['dep'], $pinfo['arr']), $pinfo['arr'], $_GET['pid']]);

    logAction($_GET['pid'], "Accepted PIREP #".$_GET['pirepid']);

    echo 1;
  } else {
    echo 0;
  }
} else {
  echo 0;
}

?>

and the html and php of the modal that this form is in 以及此表单所在的模式的html和php

<div class="modal fade" id="pirep<?= $row['id']; ?>" tabindex="-1" role="dialog" aria-labelledby="pirep<?= $row['id']; ?>Label" aria-hidden="true">
  <div class="modal-dialog modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="pirep<?= $row['id']; ?>Label">Viewing PIREP #<?= $row['id']; ?></h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Pilot:</div>
        <div class="col-md-8"><?= $userInfo['login']." - ".$userInfo['fname']." ".$userInfo['lname']." (".$userInfo['rank'].")"; ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Flight:</div>
        <div class="col-md-8"><?= $row['fnum']." (".$row['dep']." - ".$row['arr'].")"; ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Date:</div>
        <div class="col-md-8"><?= date('m/d/Y', $row['date']); ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Time:</div>
        <div class="col-md-8"><?= $row['time']; ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Route:</div>
        <div class="col-md-8"><?= $row['route']; ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Aircraft:</div>
        <div class="col-md-8"><?= $row['ac']; ?></div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">A/C Code:</div>
        <div class="col-md-8">
          <div class="input-group">
            <input type="text" class="form-control" value="<?= $row['ac_code']; ?>">
            <span class="input-group-btn">
              <button class="btn btn-secondary" type="button" id="updatePirepAC" data-pid="<?= $row['pid']; ?>" data-pirep-id="<?= $row['id']; ?>"><i class="material-icons">check</i></button>
            </span>
          </div>
        </div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Landing Rate:</div>
        <div class="col-md-8"><?= $row['landingrate']; ?> FPM</div>
      </div>
      <div class="row m-2">
        <div class="col-md-4">Pilot Comments:</div>
        <?php
          if (strpos($row['comments'], "Manual CCS Report") !== false){
              echo  "<div class='col-md-8'><a href='" . substr($row['comments'], 0, strpos($row['comments'],"|")) . "' target='_blank'>".$row['comments'] . "</a></div>";
          } else {
              echo  "<div class='col-md-8'>" . $row['comments'] . "</div>";
          }
        ?>
      </div>
      <div class="row m-2">
          <div class="col-md-4">System Comments:</div>
          <div class="col-md-8"><?= $row['acomments']; ?></div>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-warning" id="rejectPirep" data-pid="<?= $row['pid']; ?>" data-pirep-id="<?= $row['id']; ?>" data-toggle="tooltip" data-placement="top" data-animation="false" title="Reject"><i class="material-icons">close</i></button>
        <button type="button" class="btn btn-primary" name="approvePirep" id="approvePirep" data-pid="<?= $row['pid']; ?>" data-pirep-id="<?= $row['id']; ?>" data-ppm="<?= $userInfo['points']; ?>" data-toggle="tooltip" data-placement="top" data-animation="false" title="Accept"><i class="material-icons">check</i></button>
      </div>
    </div>
  </div>
</div>

Remove this line from your JS: 从您的JS中删除此行:

window.location.href = "https://virtualua.org/ams/index.php?page=noc";

and relocate it inside .done() ajax call. 并将其重新放置在.done() ajax调用中。

You should re-direct the page after you have received a reply from ajax .. 收到ajax的回复后,您应该重新定向页面。

$.ajax("includes/ajax/noc/acceptpirep.php?pid=" + n + "&ppm=" + a + "&pirepid=" + s).done(function(a) {
        "1" == a ? e.removeClass("btn-primary").addClass("btn-success") : e.removeClass("btn-primary").addClass("btn-danger");

        window.location.href = "https://virtualua.org/ams/index.php? page=noc";   //here
    }).fail(function() {
        e.removeClass("btn-primary").addClass("btn-danger");
    });

This may be happening because your code is executing asynchronously & you are not aware of that. 这可能是因为您的代码正在异步执行并且您不知道这一点而发生。 Just move your reload code inside the success/error (as you need) callback like this- 只需将您的重装代码移动到成功/错误(根据需要)这样的回调中,

$("#approvePirep").on("click", function() {
var a = $(this).data("ppm"), n = $(this).data("pid"), s = $(this).data("pirep-id"), e = $(this);
    $.ajax("includes/ajax/noc/acceptpirep.php?pid=" + n + "&ppm=" + a + "&pirepid=" + s).done(function(a) {
        "1" == a ? e.removeClass("btn-primary").addClass("btn-success") : e.removeClass("btn-primary").addClass("btn-danger");
        // here
        window.location.href = "https://virtualua.org/ams/index.php?page=noc";
    }).fail(function() {
        e.removeClass("btn-primary").addClass("btn-danger");
    });
})

我将window.location.href更改为location.href,它可以正确刷新页面,我确实按照建议的方法尝试了location.reload,但是它正在重新加载页面,并且下次打开新的模式来接受另一个pirep时,它将从最后一种格式中引入了一些但不是全部数据,但是通过上面的解决方案已解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM