gpt4 book ai didi

php - Ajax Javascript PHP - 点击太快会破坏数字

转载 作者:行者123 更新时间:2023-11-30 06:37:48 24 4
gpt4 key购买 nike

我正在使用 Ajax、Javascript 和 PHP/MySQL 构建购物车。在主购物车页面上,用户可以单击图像链接以从他们的每个项目选择中添加 1 个或删除 1 个。 Ajax 使用 PHP 脚本向数据库中该项目的金额添加 1 或从中删除 1,而 javascript 对购物车页面执行相同的操作。我遇到的问题是,当我在这些图像链接中的任何一个上单击得太快时,数据库中存在的值与屏幕上存在的值不再匹配。我认为这是一个相当容易解决的问题,但我似乎无法解决。我试过在 PHP 脚本中使用 usleep(),在 javascript 中使用 setTimeout(),我试过设置一个 cookie(更新过程开始时值为 1,更新过程结束时值为 0)并且只允许该过程运行 if value != 1,但是这些都没有解决我的问题。代码如下。

购物车.php

<a onClick='itemAddOne($item[id])' class='item_add'><img src='images/cart-add.jpg' alt='' onClick=this.src='images/cart-add_click.jpg' onMouseOut=this.src='images/cart-add.jpg'></img></a>

购物车.js

var xmlhttp;
var sub_v;
var sub_v2;
var add_tot;
var element
var item_add;
var resp;
var prov;
var taxrate;
var finish;

function itemAddOne(itemID) {
if (window.finish != 1) {
finish = 1;
document.cookie = "finish=1; path=/";
xmlhttp.open("POST","add.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
resp = xmlhttp.responseText;
add_tot = resp.substr(3);
prov = resp.substr(0,2);
if (prov == 'BC') {
taxrate = .12;
} else if (prov == 'AB') {
taxrate = .05;
} else if (prov == 'SK') {
taxrate = .05;
} else if (prov == 'MB') {
taxrate = .05;
} else if (prov == 'ON') {
taxrate = .13;
} else if (prov == 'QC') {
taxrate = .05;
} else if (prov == 'NL') {
taxrate = .13;
} else if (prov == 'NS') {
taxrate = .15;
} else if (prov == 'NB') {
taxrate = .13;
} else if (prov == 'PE') {
taxrate = .05;
} else if (prov == 'NT') {
taxrate = .05;
} else if (prov == 'NU') {
taxrate = .05;
} else if (prov == 'YT') {
taxrate = .05;
}
element = "item_quantity" + itemID;
item_add = document.getElementById(element);
tax_v = document.getElementById('tax');
tot_v = document.getElementById('tot');
sub_v = document.getElementById('subt');
item_add.value = Number(item_add.value) + 1;
sub_v.value = (Number(sub_v.value) + Number(add_tot));
tax_v.value = Number(sub_v.value) * Number(taxrate);
tot_v.value = Number(tax_v.value) + Number(sub_v.value);
tax_v.value = Number(tax_v.value).toFixed(2);
sub_v.value = Number(sub_v.value).toFixed(2);
tot_v.value = Number(tot_v.value).toFixed(2);
}
}
};
xmlhttp.send("itemid=" + itemID + "&amount=1");
finish = 0;
document.cookie = "finish=0; path=/";
}
}

添加.php

    <?
if ($_REQUEST['itemid'] && $_REQUEST['amount'] && $_COOKIE['finish'] != 1) {

require 'requires/connect.php';
require 'requires/function.php';


$_REQUEST['itemid'] = protect($_REQUEST['itemid'],'2');
$_REQUEST['amount'] = protect($_REQUEST['amount'],'2');

$sql = "SELECT id, ws_price FROM items WHERE id = '$_REQUEST[itemid]'";
$sql2 = query($sql);
$sql3 = mysql_numrows($sql2);
$add_item = mysql_fetch_array($sql2);
$add_item['ws_price'] = $add_item['ws_price'] * $_REQUEST['amount'];

if ($sql3 > 0) {

if (strlen($_COOKIE['ua_email']) > 0 && strlen($_COOKIE['ua_pass']) > 0) {

$_COOKIE['ua_email'] = protect($_COOKIE['ua_email'],'1');
$_COOKIE['ua_pass'] = protect($_COOKIE['ua_pass'],'1');

$sql = "SELECT id, province FROM user_account WHERE email = '$_COOKIE[ua_email]' AND pass = '$_COOKIE[ua_pass]'";
$sql2 = query($sql);
$sql3 = mysql_numrows($sql2);

if ($sql3 > 0) {

$user = mysql_fetch_array($sql2);

$sql = "SELECT orderid FROM orders WHERE userid = '$user[id]'";
$sql2 = query($sql);
$sql3 = mysql_numrows($sql2);

if ($sql3 > 0) {
$sql4 = mysql_fetch_array($sql2);
$order_id = $sql4['orderid'];
} else {
$sql = "SELECT orderid FROM orders ORDER BY orderid DESC";
$sql2 = query($sql);
$sql3 = mysql_fetch_array($sql2);
$order_id = $sql3['orderid'] + 1;
}

$sql = "SELECT id, amount FROM orders WHERE userid = '$user[id]' AND orderid = '$order_id' AND itemid = '$_REQUEST[itemid]'";
$sql2 = query($sql);
$sql3 = mysql_numrows($sql2);

if ($sql3 > 0) {
$sql4 = mysql_fetch_array($sql2);

if (($sql4['amount'] + $_REQUEST['amount']) > 0) {
$sql = "UPDATE orders SET amount = amount + $_REQUEST[amount] WHERE id = '$sql4[id]'";
$sql2 = query($sql);
echo "$user[province]-$add_item[ws_price]";
}

} else {

$sql = "INSERT INTO orders (orderid, itemid, userid, amount) VALUES ('$order_id', '$_REQUEST[itemid]', '$user[id]', '$_REQUEST[amount]')";
$sql2 = query($sql);

}

}
}
}
}
?>

我已经搜索过,但找不到解决此问题的简单方法,我们将不胜感激!

最佳答案

解决此问题非常简单,只需将请求设置为同步而非异步即可。现在请求是同步的,它强制每个请求在允许另一个实例开始之前完成,因此脚本现在的运行速度不可能比它们在屏幕上更新的速度快。干杯!

关于php - Ajax Javascript PHP - 点击太快会破坏数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com