getJSON не работает с последней версией jQuery - PullRequest
0 голосов
/ 12 января 2012

Следующий фрагмент кода отлично работает с использованием jQuery1.2.3, но не работает с последней версией jQuery:

$.getJSON(url,{str: $$.val() }, function(j){
   if (j.length > 0) {
      var options = '<option value="">' +params.firstOption+ '</option>';
      for (var i = 0; i < j.length; i++) {
         options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
   }
   $dest.removeAttr('disabled')
        .html(options)
        .find('option:first')
        .attr('selected', 'selected');
});

Обратите внимание, что этот код на самом деле является частью плагина jQuery для каскадного выпадающего списка. Это дает желаемый результат, если я использую jQuery1.2.3. Полный код плагина выглядит следующим образом:

(function($){

   $.fn.linkedSelect = function(url,destination,params) {


       var params = $.extend({

         firstOption : 'Please Select',

         loadingText : 'Loading...'

      },params);

      var $dest = $(destination);

      return this.each(function(){

         $(this).bind('change', function() {

            var $$ = $(this);

            $dest.attr('disabled','false')
                 .append('<option value="">' +params.loadingText+ '</option>')
                 .ajaxStart(function(){

                    $$.show();

            });

            $.getJSON(url,{str: $$.val() }, function(j){
               alert('User clicked on this.'); 
               if (j.length > 0) {

                  var options = '<option value="">' +params.firstOption+ '</option>';

                  for (var i = 0; i < j.length; i++) {

                     options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';

                  }

               }

               $dest.removeAttr('disabled')
                    .html(options)
                    .find('option:first')
                    .attr('selected', 'selected');

            }); // end getJSON

         });  // end change

      }); // end return each

   };  // end function

})(jQuery);

Обратите внимание, что не может генерировать следующее предупреждающее сообщение

alert('User clicked on this.');

что написано внутри функции getJSON для отладки, если я использую последнюю версию jQuery. И я также проследил с помощью отладчика JS, он не может войти в функцию getJSON, если я использую последнюю версию jQuery. Но, это показывает это предупреждающее сообщение, если я использую jQuery1.2.3.

В консоли ошибок отображаются предупреждающие сообщения:

Warning: reference to undefined property b.p.height
Source File: http://localhost//js/jquery.jqGrid.min.js Line: 99
Warning: reference to undefined property b.p.serializeGridData
Source File: http://localhost/js/jquery.jqGrid.min.js Line: 62
Warning: reference to undefined property jQuery.event.triggered
Source File: http://localhost/js/jquery1.7.js Line: 2924
Warning: reference to undefined property elem[jQuery.expando]
Source File: http://localhost/js/jquery1.7.js Line: 1719

Что я должен изменить, чтобы адаптироваться к последней версии jQuery. Спасибо.

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Судя по ошибкам в консоли, похоже, что используемая вами версия jqGrid не совместима с jQuery 1.7.

Если это та же версия jqGrid, которую вы использовали с jQuery 1.2.3, то это неудивительно. jQuery 1.2.3 - это древняя история, выпущенная почти четыре года назад.

0 голосов
/ 12 января 2012

Скорее всего, ваш сервер выдает недопустимый JSON.

...