2014-12-16 4 views
0

Я использую jquery UI autocomple с источником данных json, но он не работает, но когда я использовал то же самое с фиксированными данными, он работает. Ниже мой код.JQuery UI autcomplete с источником данных Json

$(document).ready(function() { 
    var codes = ""; 
    Admin_BasicFeeSchedule.LoadCPTCodes().done(function (response) { 
     if (response.status != false) { 
      if (response.CPTCodeCount > 0) { 
       var CPTCodeLoadJSONData = JSON.parse(response.CPTCodeLoad_JSON); 
       $.each(CPTCodeLoadJSONData, function (i, item) { 
        codes = codes + "'" + item.ShortName + "'"; 
       }); 
       //codes = codes + "]"; 
       alert(codes); 
      } 
     } 
     else { 
      utility.DisplayMessages(response.Message, 3); 
     } 
    }); 

    $.widget("ui.autocomplete", $.ui.autocomplete, { 
     _renderMenu: function (ul, items) { 
      var that = this; 
      $.each(items, function (index, item) { 
       that._renderItemData(ul, item); 
      }); 
      $(ul).wrap("<div></div>"); 
     }, 
    }); 

    $("input#ddlCPTCode").autocomplete({ 
     source: [codes],//['Tom', 'Alex', 'Patrick'], 
    }); 
}); 

ответ

1

на основе API jQueryUI, тем source option может быть либо массивом или строки, который указывает на URL или функции. Кроме того, код должен изменить несколько вещей, так что массив обрабатывается соответствующим образом:

$(document).ready(function() { 
    var codes = []; // array is created 
    Admin_BasicFeeSchedule.LoadCPTCodes().done(function (response) { 
     //alert("LoadCPTCodes works") ; 
     if (response.status != false) { 
      //alert("response.status true") ; 
      if (response.CPTCodeCount > 0) { 
       //alert("CPTCodeCount > 0") ; 
       var CPTCodeLoadJSONData = JSON.parse(response.CPTCodeLoad_JSON); 
       $.each(CPTCodeLoadJSONData, function (i, item) { 
        codes.push(item.ShortName); //add item to an array 
       }); 
       //codes = codes + "]"; 
       alert(codes); 
      } 
     } 
     else { 
      utility.DisplayMessages(response.Message, 3); 
     } 
    }); 

    $.widget("ui.autocomplete", $.ui.autocomplete, { 
     _renderMenu: function (ul, items) { 
      var that = this; 
      $.each(items, function (index, item) { 
       that._renderItemData(ul, item); 
      }); 
      $(ul).wrap("<div></div>"); 
     }, 
    }); 

    $("input#ddlCPTCode").autocomplete({ 
     source: codes // pass an array (without a comma) 
    }); 
}); 

Наконец, если эти изменения, связанные с массивом не достаточно, чтобы заставить его работать, то я хотел бы проверить JSON груз часть. Я добавил несколько предупреждений, которые могут быть раскомментированы для целей тестирования JSON. Поскольку я не знаком с деталями функций загрузки JSON, которые используются в примере кода, я просто упомянул, что существуют альтернативные способы загрузки данных JSON, такие как jQuery's getJSON.

+1

Спасибо, что работает, я плохо пытался, но как-то не смог обработать массив. – Sherry

+0

@ user2689563 Отлично :-) – jyrkim

Смежные вопросы