2013-07-02 115 views
0

我遇到問題,我創建了兩個選擇框。從一個選擇標記到另一個選擇標記的緩存值

從第一個選擇的值被傳遞和用於數據庫選擇,第二個是數據庫查詢的效果,並從第二個選擇值後顯示輸入將顯示詳細信息。

問題是在從第一個選擇標記中選擇值並將其傳遞給第二個值後,該值以某種方式被緩存,因此在從第二個選擇框中選擇值之後我得到的值與第一個選擇框中的值相同。

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); 
    } 
}); 
} 
+0

爲什麼在'select_contract(folder_id,counter)'中的第一個ajax調用之後解除綁定'change'處理程序? – ElmoVanKielmo

+0

唔,那不可能存在:P lemme修復它 –

+0

所以我懷疑...你能發佈你的HTML,至少是一部分? – ElmoVanKielmo

回答

0

如果AJAX請求的緩存是問題,因爲你建議gested,你可以嘗試添加:

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

這將在日期戳附加的URL參數,以此來保證的網址,瀏覽器不會抓取緩存副本。我曾多次遇到這個問題,特別是在使用IE時。

你也可以這樣做:

$.ajaxSetup({cache : false}); 

這將禁用緩存的所有請求。