0

我有一个问题,我创建了两个选择框。

从第一个中选择值后,它被传递并用于 db select,第二个是 db 查询的效果,从第二个输入中选择值后,将显示详细信息。

问题是在从第一个选择标记中选择值并将其传递给第二个之后,该值以某种方式被缓存,因此在从第二个选择框中选择值后,我收到与我在第一个选择框中更改值的相同数量的请求。

jQuery 看起来像:

第一个选择框

function select_contract(folder_id, counter)
{
 var dataString = 'folder_id='+folder_id+'&counter='+counter;

 $.ajax({
     type: "GET",
     url: $("#url_autosearch").attr('value'),
     data: dataString,
     datatype: "json",
     success: function(event){
         var option = $.parseJSON(event);
         $("#autocomplete-select-contract-"+counter).show();
         $("#autocomplete-select-contract-"+counter).html(option.contract_list);
         $("#autocomplete-select-contract-"+counter).change(function(){
             var contract_id = $("#invoice-contract-select-"+counter).val();
             select_service(contract_id, counter);
         });
     }
 });
 }

第二个选择框:

function select_service(contract_id, counter)
{
 var dataString = 'contract_id='+contract_id+'&counter='+counter;

 $.ajax({
     type: "GET",
     url: $("#url_autosearch").attr('value'),
     data: dataString,
     datatype: "json",
     success: function(event){
        var option = $.parseJSON(event);

        $("#autocomplete-select-service-"+counter).show();
        $("#autocomplete-select-service-"+counter).html(option.service_list);  
        $("#autocomplete-select-service-"+counter).change(function(){
            var service_id = $("#invoice-service-select-"+counter).val();

            add_currency_value(contract_id, service_id, counter);
            return false;
        });
     }
 });
}

和详细信息

 function add_currency_value(contract_id, service_id, counter)
 { 
 var selected = $("#invoice-service-select-"+counter).find('option:selected');
 var cost_id = selected.data('cost');
 var dataString = 'contract_id='+contract_id+'&service_id='+service_id+'&counter='+counter+'&cost='+cost_id;

 $("#cost-id-"+counter).val(cost_id);

 $.ajax({
     type: "GET",
     url: $("#url_autosearch").attr('value'),
     data: dataString,
     datatype: "json",
     success: function(event){
        var option = $.parseJSON(event);

        $("#autocomplete-currency-value-"+counter).show();
        $("#autocomplete-currency-value-"+counter).html(option.currency_label);
     }
 });
 }
4

1 回答 1

0

如果 AJAX 请求的缓存是您建议的问题,您可以尝试添加:

$.ajax({
     cache: false,
     ...

这会将日期戳作为 URL 参数附加到您的 URL,以确保浏览器不会抓取缓存的副本。我已经多次遇到这个问题,尤其是在使用 IE 时。

你也可以这样做:

$.ajaxSetup({cache : false});

这将禁用所有请求的缓存。

于 2013-07-08T17:30:24.190 回答