2012-01-12 2 views
0

이 다음 코드의 최신 버전에서 작동하지 않지만, jQuery를 최신 버전으로 작동하지 않습니다해서 getJSON 잘 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); 

그것은 다음과 같은 경고 메시지를 생성 할 수 있습니다 내가의 최신 버전을 사용하는 경우 디버깅 목적을 위해해서 getJSON 함수 내부에 기록 된 것을

alert('User clicked on this.'); 

jQuery. 또한 jQuery의 최신 버전을 사용하는 경우 JS 디버거를 사용하여 추적하고 getJSON 함수로 이동할 수 없습니다. 그러나 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를 최신 버전으로 적응하기 위해 무엇을 변경해야합니다. 고맙습니다.

+5

스택 오버플로에 오신 것을 환영합니다! "작동하지 않는다"는 결코 좋은 에러 설명이 아니다. 무엇이 잘못되었는지, 어떤 오류 메시지가 나옵니까, 등등을 설명하십시오. –

+1

어디서 오류가 발생합니까? 코드에 console.log를 추가하여 사용하려는 jquery의 최신 버전을 정확히 찾을 수 있으며 어떻게로드 했습니까? – alonisser

+0

어떻게 작동하지 않는지, 테스트 케이스가 무엇인지 자세히 설명해 주시겠습니까? 정확히 동일한 코드에서 똑같은 입력을 테스트하고 있으며, 유일한 차이점은 jQuery 버전입니다. 맞습니까? –

답변

0

대부분의 경우 서버가 잘못된 JSON을 생성하고 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. @blockhead, 테스트 해봤습니다. 유효한 JSON을 생성합니다. – Agilox

+0

네, 맞습니다. 실제로, jQuery 1.3 이전 버전은 들어오는 JSON을 평가하기 위해 JavaScript의 평가를 사용했습니다. jQuery 1.4는 사용 가능한 경우 네이티브 JSON 파서를 사용합니다. 또한 들어오는 JSON의 유효성을 검사하므로 잘못된 json (예 : {foo : "bar"})은 jQuery.getJSON의 jQuery와 Ajax 요청의 dataType으로 "json"을 지정할 때 거부됩니다. – Agilox

+1

내 서버 측 스크립트는 {Value : 28.000, Display : "28.000"}과 같은 JSON을 생성하고 jQuery1.3 +에서 정상적으로 작동합니다. 최신 jQuery의 경우 { "Value": "28.000", "Display": "28.000"} – Agilox

2

콘솔의 오류를 기반으로 사용중인 jqGrid 버전이 jQuery 1.7과 호환되지 않는 것 같습니다.

jQuery 1.2.3에서 사용했던 것과 동일한 jqGrid 버전이라면 그다지 놀라운 일이 아닙니다. jQuery 1.2.3은 4 년 전 출시 된 고대 기록입니다.

+0

설명서에 따라 jqGrid와 jQuery 버전을 정확하게 업데이트했습니다. jqGrid 기능에는 문제가 없지만 계단식 (Linkedselect) 플러그인에는 문제가 있음을 유의하십시오. 고맙습니다. – Agilox

+0

아, 그러면 다른 플러그인이 될 수 있습니다. 시작하려면'$ dest'를 비활성화하기 위해'.attr()'대신 ['.prop()'] (http://api.jquery.com/prop)를 사용해야합니다. –

+0

jqGrid 플러그인이없는 계단식 플러그인을 별도의 파일로 테스트했습니다. 계단식 기능에서도 jQuery1.5.2와 동일한 문제가 발생하지만 jQuery1.2.3에서는 문제가 없습니다. 그래서 문제는 계단식 플러그인에만 있습니다. 더 좋은 계단식 플러그인을 대신 사용 하시겠습니까? 또한 테스트 목적으로 $ dest를 사용하지 않으려면 .attr() 대신 .prop()를 사용했습니다. – Agilox

관련 문제