Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Jquery键启动/ajax错误_Php_Jquery_Session_Keyup - Fatal编程技术网

Php Jquery键启动/ajax错误

Php Jquery键启动/ajax错误,php,jquery,session,keyup,Php,Jquery,Session,Keyup,我有一个页面,客户可以输入他们想要订购的产品数量。因此,我将jquery键向上函数与ajax脚本结合使用: <input type="text" class="number" data-product_id="1"> <input type="text" class="number" data-product_id="2"> <input type="text" class="number" data-product_id="3"> 等等 $(函数()

我有一个页面,客户可以输入他们想要订购的产品数量。因此,我将jquery键向上函数与ajax脚本结合使用:

<input type="text" class="number" data-product_id="1">
<input type="text" class="number" data-product_id="2">
<input type="text" class="number" data-product_id="3">

等等


$(函数(){
$(“input.number”).keyup(函数(){
$.post(“number.php”,{product_id:$(this).data('product_id'),number:$(this.val()},函数(data){if(data!=“1”){alert('Error occurrent');});
});
})
基本上,这个系统运行良好。这些数字通过PHP会话临时存储,稍后将进行处理。但有一个问题:有多个输入字段(>500),用户可以通过tab按钮快速输入他们想要订购的商品数量。我发现,尽管te number.php文件的大小非常小,但如果用户输入的速度非常快,并不是所有的数字都能正确存储,只是行
$\u SESSION[$\u POST['product\u id']]=$\u POST['number']在文件中

是否有任何解决方案来检查所有提交的字段

$(function() {
  $("input.number").keyup(function() {
    var that = $(this);
    that.addClass('loading');
    $.post(
      "number.php",
      { product_id: $(this).data('product_id'), number: $(this).val() },
      function(data) {
        that.removeClass('loading').removeClass('failed');
        if (data != that.val()) {
          that.addClass('failed');
        }
      }
    );
  });
});

如果返回值与输入值不匹配,则基本上添加类
failed
。当然,这假设
number.php
返回存储的值。稍后,您可以检查类
失败的输入字段

,奇怪的是,有时可能由于输入速度快,没有任何响应。您的答案并不是jquery bug的真正解决方案,不是吗?它不是“bug”的解决方案。这只是一个查找会话中可能未存储的字段的工作循环。如果您能够接受延迟,您可以尝试使用事件
更改
而不是键控。或者两者都使用。这是jquery中的常见错误吗?键控触发得很好,但是ajax没有正确提交。我认为这不是jquery中的错误,而是并发连接太多的问题。每次按键时都会触发按键事件。这可以是
SHIFT
键、
TAB
键或任何其他键。因此,您发送了大量的
AJAX
调用。查看此问题:这就是为什么使用
.change()
事件可能更好的原因,该事件仅在输入字段失去焦点后触发一次。感谢您的反应。可能这就是问题所在,但我们使用“keyup”和.change()函数的原因是:用户可能输入一个值,但不更改字段或单击字段外部,而是单击链接。在这种情况下没有触发.change()函数,因此没有设置更改。
$(function() {
  $("input.number").keyup(function() {
    var that = $(this);
    that.addClass('loading');
    $.post(
      "number.php",
      { product_id: $(this).data('product_id'), number: $(this).val() },
      function(data) {
        that.removeClass('loading').removeClass('failed');
        if (data != that.val()) {
          that.addClass('failed');
        }
      }
    );
  });
});