jQuery $.post() 执行两次后的 php 代码
Posted
技术标签:
【中文标题】jQuery $.post() 执行两次后的 php 代码【英文标题】:php code after jQuery $.post() is executed twice 【发布时间】:2013-05-07 14:23:08 【问题描述】:我还是 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 控制台中的错误还是我的代码不好?
【问题讨论】:
您使用的是什么浏览器? Fireforx 有时会发生在我身上。 我在 Chromium 中对其进行了测试。有没有可能它只是一个 PHP 控制台错误? 【参考方案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 时才会在表中插入行。
【讨论】:
以上是关于jQuery $.post() 执行两次后的 php 代码的主要内容,如果未能解决你的问题,请参考以下文章
为啥我用jQuery写好checkbox的全选后,点击两次后,就不行了,要刷新页面后,点击才有响应,源码是这样