2017-01-25 6 views
-1

У меня есть функция, которая получает параметр, а затем вызывает [selectize.js] [1].пытается вызвать selectize с другим параметром, но он работает со старым значением

Первоначально я звоню myFunc с param равным 1. Он работает, данные поступают с сервера, и я получаю раскрывающийся список с ним.

Но позже я называю myFunc с другим param значения, скажем 2.

И я вижу в консоли, что myFunc получает 2, но load функции и Аякс success журнал функция 1 утешать, и данные поступают в если param значение было 1.

Если я называю myFunc с param равен 2 в первый раз, данные поступают, как если param значение 2.

Я попытался для добавления к load и ajax success функция cache: false. Но функция load продолжает использовать старое значение param.

function myFunc(param) { 
    console.log(param); 
    $("#select-control").selectize({ 
     valueField: 'id', 
     labelField: 'name', 
     searchField: 'name', 
     options: [], 
     create: false, 
     render: { 
      option: function(item, escape) { 
       return '<div>' + escape(item.name) + '</div>'; 
      } 
     }, 
     score: function(search) { 
      return function(item) { 
       return 1; 
      } 
     }, 
     load: function (query, callback) { 
      console.log("selectize loading data"); 
      console.log(param); 
      this.clearOptions(); 
      $.ajax({ 
       url: "/api/some/end/point", 
       type: 'GET', 
       data: { 
        q: query, 
        some_param: param 
       }, 
       error: function() { 
        callback(); 
       }, 
       success: function (res) { 
        console.log(res); 
        console.log(param); 
        callback(JSON.parse(res)); 
       }, 
      }); 
     } 
    }); 
} 

Здесь редактируется с консоли

23378 // myFunc received this value as param 
selectize loading data // load function is called 
23378 // param value inside load function 
{/* here is the response, which contains data */} 
23378 // param value inside ajax success function 
19476 // myFunc received new value 
selectize loading data // load function is called 
23378 // but the load function uses the first param value, it should be 19476 here 
{/* the same old response, param didn't change*/} 
23378 // and ajax success function also uses the old value, it also should be 19476 
+0

Вы можете поставить экран печати всех журналов, пожалуйста? Если я правильно думаю, его невозможно, чтобы первая «консоль» выдавала что-то отличное от «консоли» внутри функции загрузки –

+0

только что опубликованные значения из консоли. В первый раз, когда вы правы, первая «консоль» не выводит что-то другое, но при вызове 'myFunc' второй раз это делает. – sasha199568

ответ

0

Я просто добавил глобальную переменную для param, а затем я использую его.

var globalParam; 

function myFunc(param) { 
    globalParam = param; 

    // ... 
    /* use globalParam instead of param later*/ 
    // ... 
} 

Я не знаю, почему он не работает без глобальной переменной