2012-09-21 2 views
0

나는 perl cgi를 호출하여 그리드를 채우는 jqgrid를 가지고있다. cgi는 DBD :: Oracle을 사용하여 데이터를 가져옵니다. 그리드가 데이터를 표시하지 않습니다.jqgrid ajax와 perl cgi 및 dbd oracle

스크립트를 디버깅 할 때 명령문이 준비 될 때 충돌이 있음을 발견했습니다. 준비를 건너 뛰고 데이터를 보내면 제대로 작동합니다. 내가 오라클에서 PostgreSQL로 바꿀 때 잘 돌아 간다.

누구나이 경험이 있습니까? 대화식으로 실행할 때 CGI가 실행되어 화면에 인쇄되기 때문에 CGI가 Oracle 연결로 작업하고 있다는 것을 알고 있습니다. 그리드에서 CGI가 호출 될 때 CGI가 호출되지 않습니다. 는 CGI가 대학원 연결 호출 및 그리드에 데이터로드를 준비 할 때 -

는 CGI 완벽한 : 나는 결론있어

#!/usr/bin/perl 
    use CGI; 
    use DBI; 
    use Connect::Oracle; 
    use Connect::PG; 

    $stat = new CGI(""); 
    print $stat->header; 
    $count = $stat->url_param('count'); 

    #connecting to either db works fine 
    my $ORdbh = DBI->connect(Oracle->User, {PrintError=>1,RaiseError=>1}); 
    # my $ORdbh = DBI->connect(PG->User, {PrintError=>1,RaiseError=>0}); 

    $select = qq/select * from db.table/; 

    # preparing with Oracle connection works fine, but nothing returned to grid. 
    # Not even the hardcoded $rows below! 
    # Preparing with PG connection works also but $rows returns to grid 

    my $select_batch_status = $ORdbh->prepare($select); 
    #$select_batch_status->execute(); 
    #$select_batch_status->bind_columns(\$COLLECTID, \$SYSTEM); 

    ....removed fetch()....irrelevant 

    #The JSON is fine 

    $rows = qq/["COLLECTID","SYSTEM"]/; 

    $data = qq/{"page":"1","total": 1, "records": "$row_count", "rows": [/; 
    $data .= $rows; 
    $data .= qq/]}/; 

    print "$data"; 
    exit; 

을있는 jqGrid와 DBD :: 오라클 만 사이에 충돌이있다 나는 더 낮은 것을 디버깅 할 방법이 없다. 그리드는 Pg와 잘 작동하지만 오라클을 사용하고 싶습니다. 크롬 개발자 도구에 나는 경고 나 오류가 표시되지 않으며, CGI는 데이터

를 전송하지

그리드 :

<script type="text/javascript"> 
    var counter=0; 
    jQuery(function() { 
     jQuery("#list3").jqGrid({ 
      url:'./collect.cgi?count=' + counter, 
      datatype: "json", 
      ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
      colNames: ['COLLECT ID', 'SYSTEM'], 
      colModel: [ 
       {name: 'collectid', index: 'collectid', width: 100}, 
       {name: 'system', index: 'system', width: 50}, 
      ], 
      rowNum: 20, 
      rowList: [15, 30, 45], 
      pager: '#pager3', 
      sortname: 'system', 
      sortable: true, 
      loadonce: true, 
      viewrecords: true, 
      sortorder: "asc", 
      rowTotal: 500, 
      jsonReader: { 
       cell: "", 
       id: "0" 
      }, 
      gridview: true, 
      loadComplete: function() { 
      $(document).ready(function() { 
        setTimeout (function() { 
          counter++; 
          $("#list3").jqGrid().setGridParam({ 
            url: './collect.cgi?count=' + counter, 
            datatype: 'json', 
            loadonce: true 
          }).trigger("reloadGrid",[{current:true}]); 
        }, 10000); 
      }); 
      }, 
      loadError: function(xhr,st,err) { 
        $("#jsonmapMessage").html("Type: " + st + "; Response: " + xhr.status + " " + xhr.statusText); 
      }, 
      loadtext: "updating...", 
      caption: "COLLECTION MONITOR CONTROL", 
      width: 'auto', 
      height: '500' 
     }); 

    $("#list3").jqGrid('navGrid','#pager3',{edit:true,add:true,del:true,refresh:true}); 

    }); 

</script> 

답변

0

나는 최근에이 문제를 다시 방문 할 수 있었다, 일부 굴착 및 웹 후 로그 리뷰를 통해 cgi 프로그램이 DBD :: Oracle에 필요한 모든 라이브러리를로드 할 수 없음이 밝혀졌습니다. 이러한 라이브러리를 사용 가능하게하려면 적절한 라이브러리를 가리 키도록 LD_LIBRARY_PATH env 변수를 업데이트해야했습니다. 이 변경은 cgi 프로그램이 환경을 확보하는 웹 서버 레벨에서 필요합니다. LD_LIBRARY_PATH를 스크립트에 추가해도 아무런 효과가 없습니다. 내 웹 서버 : Oracle iPlanet에서 server.xml 구성 파일의 cgi 섹션을 업데이트하고 웹 서버를 다시 시작해야했습니다 (관리 콘솔에서 변경하지 않았 음)