AJAX mysql命令没有立即执行?

时间:2014-05-12 04:22:49

标签: javascript php mysql ajax

所以我有一些代码,它检查是否存在一次性使用折扣代码,如果是,则应用它然后将其标记为在数据库中使用。问题是,如果垃圾邮件点击它,它最终可以使用不止一次,然后有一段时间可能会在15-20秒之后停止使用。

相关的javascript组件:

if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {

      discountAmount += parseFloat(xmlhttp.responseText); 
      modifyCartOrder();
    }
  }
xmlhttp.open("GET","forms/jsPromoCode.php?code="+code+"&type="+order_name,true);
xmlhttp.send();

这是在php文件中处理的,当找到匹配时我们回显该数量然后删除条目

$mysqli->query("DELETE FROM discounts_available WHERE `index`=$index");

php文件确实在做它应该做的事情。单击“应用代码”时,会立即从数据库中删除它。问题是,即使代码不再在db中,你仍然可以在js文件最终意识到db中没有条目之前反复应用代码一段时间。这是为什么?

4 个答案:

答案 0 :(得分:1)

你首先要检查它是否存在于DB中,然后只有你应该继续请求,它应该是第一个声明。 如果它不存在,您可以发送已应用代码的响应。

答案 1 :(得分:0)

您很可能需要尽快锁定表,以便其他实例不能同时修改表。

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

答案 2 :(得分:0)

我没有得到你的问题,我正在假设丢失的东西,所以..

//this is triggered on some click, right?
//TODO:- check if button is disabled? you can have some js variable or check button attribute disbled
//TODO:-if its not disaled->{so first disable the button when it is clicked } else do nothing
if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else { // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {

      discountAmount += parseFloat(xmlhttp.responseText);
      // if succefull keep button disabled
      // else renable it, so that it can be clicked again. 
      modifyCartOrder();
    }
  }
xmlhttp.open("GET","forms/jsPromoCode.php?code="+code+"&type="+order_name,true);
xmlhttp.send();

他们的代码中没有语法问题,这是合乎逻辑的, ajax调用是异步调用,它不会按顺序发生 1)你点击了 2)请求已发送 3)处理请求 4)通知JS:您的modifyCartOrder函数已执行

我想在这里说的是,在2之后没有3,3需要时间才能启动,js无法控制它,每当php完成它将回复那里并不保证。所以你可以反复重复1次,2次会继续重复......所以3会...... 我希望我理解你的问题,你理解我想说的话:)。

答案 3 :(得分:0)

问题是:您正在通过以下代码发送异步ajax调用

  

xmlhttp.open( “GET”, “?形式/ jsPromoCode.php代码=” +代码+ “&安培;类型=” + ORDER_NAME,的);

解决方案:如定义,打开ajax调用,方法是:

  

<强> xmlhttp.open(方法,URL,异步)

所以,你必须将上面的行修改为:

  

xmlhttp.open( “GET”, “?形式/ jsPromoCode.php代码=” +代码+ “&安培;类型=” + ORDER_NAME,的);