1

我有一个常规的选择列表。

<select name="pets">
    <option>Dog</select>
    <option>Cat</select>
</select>

一旦选定的项目发生了变化,我需要产生一个 ajax 调用来更新一个值。我的问题是,如果用户使用键盘随机播放这些值,则更改事件会被触发一堆。因此意味着对服务器的许多 ajax 调用。这种方法对我来说似乎不合适。

如果我使用模糊或焦点,用户可以更改值,并且他们的下一次单击可以将他们带到单独的页面,永远不允许 ajax 请求完成。

我不确定处理这种情况的最佳方法。

4

3 回答 3

0

可能您可以使用setIntervalclearInterval稍微延迟您的 AJAX 调用,例如一秒钟,如果用户在那段时间内再次更改它,您清除之前的间隔,并设置一个新的间隔,等等。

如果选择看起来很稳定,那么您的 AJAX 调用就会发生。

有关如何使用这些方法的示例,请参见此处。http://www.w3schools.com/js/js_timing.asp

于 2012-12-05T14:40:44.843 回答
0

只有在用户不活动一段时间后才能进行 ajax 调用。

示例

$(document).ready(function(){
    var timer;
    $('select').change(function(){
        var self = this;
        window.clearTimeout(timer);
        timer = window.setTimeout(function(){
            delayedOnChange.apply(self, arguments);
        }, 300);
    });
    var delayedOnChange = function() {
        console.log($(this).val());
        // ajax call here
    }
}); 
于 2012-12-05T14:41:31.007 回答
0

On.blur将是您的最佳选择。大多数浏览器在执行同步 ajax 请求时会锁定直到请求完成。如果您不需要服务器页面和 jquery 之间的同步握手,那么无论如何您都不会使用它。

默认情况下,jquery 中的 ajax 请求是异步的,一旦你触发了你的请求,你就不必一直等待响应。

http://api.jquery.com/jQuery.ajax/

于 2012-12-05T14:51:18.457 回答