【问题标题】:How to avoid repeated requests in textbox, textarea interacting with server如何避免文本框中重复请求,文本区域与服务器交互
【发布时间】:2011-09-06 09:23:23
【问题描述】:

在 Javascript 中,是否有人/任何人有一个详尽的组合键列表来避免。例如,为每个按键发送 Web 服务请求的文本框。它经常发生在诸如HOME[对于光标返回到文本框开头]、DELETESHIFT + HOME + DELETE 之类的组合键上,事件触发并且相同的请求参数被发送到 web 服务。[我知道缓存查询结果将解决这种情况但其他呢]。我很想看到这个列表,因此我之前找不到类似的问题 更新: 由于较早的问题标题似乎太离谱并且可能关闭,我更改了它。我想知道如何优化这个以 ajax 方式发送请求的过程不那么密集。

【问题讨论】:

    标签: javascript events list textbox keypress


    【解决方案1】:

    假设用户正在文本区域或输入中书写,您可以检查每次击键时该元素的值;如果它与上一个值不同,则将其发送到服务器。如果相同,则什么也不做。

    例子:

    function updateOnKeypress(input) {
        var lastValue;
        input.addEventListener('keypress', function() {
            if( input.value.trim() !== lastValue ) {
                // trim() isn't available in every browser, but you can add it
                // Of course, if leading/trailing whitespace is supposed to trigger
                // a request, then skip the trim()
                lastValue = input.value.trim();
                // … send value to server
            }
        });
    }
    

    您可能还希望使用计时器来限制请求的数量,因此不是每个更改都会导致对服务器的请求。例如,每次更改都会启动一个超时时间(例如 0.3 秒),然后在计时器执行时发送该值。

    function updateOnKeypressDelayed(input) {
        var lastValue, timer;
        input.addEventListener('keypress', function() {
            if( !timer ) {
                timer = setTimeout(function () {
                    if( input.value.trim() !== lastValue ) {
                        lastValue = input.value.trim();
                        timer = null;
                        // … send value to server
                    }
                }, 300);
            }
        });
    }
    

    【讨论】:

    • 嘿,谢谢你的提示。当然增加了我的价值。我会在选择一个之前等待进一步的答案
    【解决方案2】:

    与其避免所有这些组合,不如只限制你接受的内容。

    例如制作一个 JS 函数来检查这是一个字符、字母还是特殊字符,如果不是则不提交给服务器。

    【讨论】:

    • 我会,但由于实施不当而无法实现
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2012-08-18
    • 2011-06-14
    • 1970-01-01
    • 2011-04-27
    • 2020-06-24
    • 2011-12-27
    • 2018-08-11
    相关资源
    最近更新 更多