jQuery('select[field]').each(function(){
    var jobj = $(this);
    var pre_field_name = jobj.attr('filtered_by');
    var parent_field_name = jobj.attr('field');
    var data_url =jobj.attr('data-url');
    var val = jobj.val();
    $('select[name='+parent_field_name+']').change(function(){
        console.log('change');
        if($(this).val()){
            console.log('ajax');
            $.get(data_url, {'pk': $(this).val()}, function(response){
                console.log('response');
                var options = '';
                for (var i = 0; i < response.length; i++) {
                    options += '<option value="' + response[i].value + '" '+  (val==response[i].value?'selected="selected"':'') +  '>' + response[i].display + '</option>';
                }
                jobj.html(options);
                jobj.change();
            })
        } else {
            jobj.html('<option value="">------</option>');
            jobj.change();
        }
    }).change();

})


如果页面上有3个元素满足此jQuery('select[field]')选择器-则在chrome日志中,我会看到6个(我猜是.change()的两倍)response日志记录。但是在chrome控制台的network选项卡和服务器日志中,我看到只有一个请求。可能是什么原因?

最佳答案

这不是隐藏的优化,而是documented行为,用于缓存http响应,

快取


  如果设置为false,它将强制请求的页面不被缓存
  浏览器。注意:将缓存设置为false只能与
  HEAD和GET请求。通过将“ _ = {timestamp}”附加到
  GET参数。其他类型的参数不需要该参数
  请求,但在IE8中,当对已经存在的URL进行POST时
  是GET请求的。

关于javascript - jQuery隐藏的Ajax优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22953513/

10-13 03:39