0

我对 PHP 和 AJAX 还很陌生,但我认为我对 JavaScript 和 jQuery 有一定的了解。这是我的问题:在我的 UI 中,我有一个表单输入字段和一个 OK 按钮(它不是表单的一部分)。每次用户点击确定按钮时,输入字段的内容加上一些会话变量将通过 AJAX 发送到服务器,这样页面就不必重新加载。

这是我的js代码:

$.post('api/someFile.php',
  {
    var1: nr1,
    var2: nr3,
    var3: nr3,
  }
);

这是我的 php 代码someFile.php

<?php
  // activate current session
  session_start();

  // use php console for debugging    
  require_once('PhpConsole.php');
  PhpConsole::start();

  // get data from UI
  $var1 = $_POST["var1"];
  $var2 = $_POST["var2"];
  $var3 = $_POST["var3"];

  debug("start receiving");
  debug($var1 . " " . $var2 . " " . $var3);

  // ... proceed with the data and write it in database...

  debug("finished");
?>

问题是所有代码someFile.php都执行了两次。这是控制台输出:

javascript debug: send to server: nr1, nr2, nr3
php debug: start receiving
php debug: nr1 nr2 nr3
php debug: finished
php debug: start receiving
php debug: nr1 nr2 nr3
php debug: finished

但是,数据只写入数据库一次。这很奇怪。这是 php 控制台中的错误还是我的代码不好?

4

1 回答 1

1

它的发生是因为 HTTP OPTIONS 首先执行,并且您在执行逻辑之前限制了不需要的 HTTP 方法,请始终使用 isset 方法,请参见下面的示例

if(isset($_POST))
 {
    $name = $_POST["name"];
    $country = $_POST["country"];

    $sql = 'INSERT INTO user values("' . $name . '","' . $country . '")';

            if ( $conn->query($sql)=== TRUE) 
            {
                $outp =  "Inserted " .  $name . "  and  "  . $country;
                echo json_encode($outp);
            } else {
                echo json_encode("Error: " . $sql . "<br>" . $conn->error);
            }
        }

只有当它的 POST METHOD 时,它才会在表中插入行。

于 2017-11-27T06:32:53.780 回答