2014-12-18 2 views
-1

Как показано, у меня есть скрипт perl cgi, который печатает JSON.Отладка с помощью HTML JSON

Это 2 части. part-1 показывает текстовое поле/раскрывающееся окно в html для пользователя с кнопкой поиска.

Когда пользователь вводит ввод и нажимает кнопку поиска, запускается функция javascript do_search, которая вызывает тот же скрипт cgi и отправляет значения с использованием параметров.

часть-2 скрипта принимает эти значения и запрашивает базу данных и извлекает результат и печатает в json.

Мой вопрос заключается в том, как отладить этот скрипт. Для примера. Я хочу напечатать sql и посмотреть. Как мне это сделать?

CGI Script: 

#!/usr/bin/perl -wT 

use DBI; 
use strict; 
use CGI qw(param); 
use Data::Dumper; 
use JSON; 

use lib "/home/thames/lib"; 
use Kearynet; 

my $method = param('method'); 

if($method){ 

     my $html; 

     my $id = param('id'); 
     my $inspector = param('inspector'); 
     my $postcode = param('postcode'); 
     my $pjk_status = param('status'); 
     my $pjk_validated = param('pjkvalidated'); 
     my $pjk_type = param('pjktype'); 

     my @query; 
     my @query_values; 

     if($id){ 
       #$html .= "Id is <b>" . $id . "</b><br>"; 
       push(@query, "`inspection_id` = ?"); 
       push(@query_values, $id); 
     } 

     if($inspector){ 
       #$html .= "Inspector is <b>" . $inspector. "</b><br>"; 
       push(@query, "`inspector` LIKE ?"); 
       push(@query_values, '%' . $inspector. '%'); 
     } 

     if($postcode){ 
       #$html .= "Postcode is <b>" . $postcode. "</b><br>"; 
       push(@query, "`postcode` LIKE ?"); 
       push(@query_values, '%' . $postcode. '%'); 
     } 

     if($pjk_status){ 
       push(@query, "`status` = ?"); 
       push(@query_values, $pjk_status); 
     } 

     if($pjk_validated){ 
       push(@query, "`PJK_Validated` = ?"); 
       push(@query_values, $pjk_validated); 
     } 

     if($pjk_type){ 
       push(@query, "`PJK_Type` = ?"); 
       push(@query_values, $pjk_type); 
     } 
       push(@query, "`date` > ?"); 
       push(@query_values, "20140831"); 


     my $dbh = DBI->connect("DBI:mysql:database=tw;host=db.net", "xyz", "xyz"); 
     my $sql = "SELECT * FROM tw_general.insp_gang "; 

     if(@query){ 
       $sql .= "WHERE " . join(' AND ', @query); 
     } 

     $sql .= " ORDER BY date"; 
     #$html .= "Sql is <b>" . $sql. "</b> <br>"; 
     my $query = $dbh->prepare($sql); 
     warn $sql; 

     if($query->execute(@query_values)){ 
       if($query->rows > 0){ 
         $html .= "There are <b>" . $query->rows . "</b> records matching.<br><br>"; 
         $html .= "<table cellpadding='4' width='960' cellspacing='0' style='border:1px solid #CCCCCC'>"; 
         $html .= "<tr>"; 
         $html .= "<td><b>Inspection ID</b></td>"; 
         $html .= "<td><b>Inspector </b></td>"; 
         $html .= "<td><b>Street </b></td>"; 
         $html .= "<td><b>Town </b></td>"; 
         $html .= "<td><b>Postcode </b></td>"; 
         $html .= "<td><b>Status </b></td>"; 
         $html .= "<td><b>PJK_Type</b></td>"; 
         $html .= "<td><b>PJK_Validated</b></td>"; 
         $html .= "<td><b>Date</b></td>"; 
         $html .= "</tr>"; 
         while(my $row = $query->fetchrow_hashref){ 
           $html .= "<tr>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC'><b><a href='SelectGangInsp.cgi?param1=$row->{inspection_id}' target='_blank'>$row->{inspection_id}</a></b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{inspector}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{street}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{town}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{postcode}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{status}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{PJK_type}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{PJK_Validated}</b></td>"; 
           $html .= "<td style='border-bottom:1px solid #CCCCCC' nowrap><b>$row->{date}</b></td>"; 
           $html .= "</tr>"; 
         } 
         $html .= "</table>"; 
       }else{ 
         $html .= "<b>Sorry - No Results were returned...</b>"; 
       } 
     } 
     print "Content-Type: application/json\n\n"; 
     #$html .= "There are <b>" . $id. "</b> records matching.<br><br>"; 
     print to_json({value =>  $html}, {ascii => 1}); 


exit 0; 
} 

print "Content-type: text/html\n\n"; 
#print "<html><head><title>Hello World</title></head>\n"; 
#print "<body>\n"; 
#print "<h2>Hello, world!</h2>\n"; 
#print "</body></html>\n"; 
print <<HTML_BLOCK; 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Kearynet - Show Gang Inspection Information 2014</title> 
<link href="style.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
<script type="text/javascript" src="db_search.js"></script> 
</head> 
<body> 
<h1 style='color:#999999'>Show Gang Inspection Information (2014)</h1> 
<br><br> 
<table width="760" border="0" cellspacing="0" cellpadding="4"> 
    <tr> 
    <td><strong>Inspection Id</strong></td> 
    <td><strong>Inspector</strong></td> 
    <td><strong>Postcode</strong></td> 
    <td><strong>Status</strong></td> 
    <td><strong>PJK<br>Type</strong></td> 
    <td><strong>PJK<br>Validated</strong></td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td><input name="inspid" type="text" id="inspid" /></td> 
    <td><input name="inspector" type="text" id="inspector" /></td> 
    <td><input name="postcode" type="text" id="postcode" /></td> 
    <td><select name="status" id="status"> 
       <option></option> 
       <option>Holding</option> 
       <option>Completed</option> 
       <option>TEST</option> 
     </select></td> 
    <td><select name="pjktype" id="pjktype"> 
       <option></option> 
       <option>Gang on site</option> 
       <option>Unattended SLG</option> 
       <option>Post works</option> 
       <option>Pre-works</option> 
     </select></td> 
    <td> 
     <select name="pjkvalidated" id="pjkvalidated"> 
       <option></option> 
       <option>Yes</option> 
       <option>No</option> 
       <option>Null</option> 
     </select> 
     </td> 
    <td><input type="button" value="Search" onclick="DoSearch()"/></td> 
    </tr> 
</table> 
<br><hr color='#CCCCCC'><br> 
<div name='search' id='search'></div> 
    HTML_BLOCK 

Java script: 
function DoSearch(){ 

     var ID = $("#inspid").val(); 
     var Inspector = $("#inspector").val(); 
     var Postcode = $("#postcode").val(); 
     var Status = $("#status").val(); 
     var PjkValidated = $("#pjkvalidated").val(); 
     var PjkType = $("#pjktype").val(); 

     $("#search").html("<div style='padding:10px'><img src='img/loading.gif'></div>"); 

     $.post('DoGangInsp.cgi', {method: "search", id: ID, inspector: Inspector, postcode: Postcode, status: Status, pjkvalidated: PjkValidated, pjktype: PjkType}, 

       function(data){ 

         $("#search").html(data.value); 


       } 
     ); 

} 
+1

Вы возвращаетесь json. вы можете легко добавить строку запроса в другой параметр в json. вы можете сбросить его в файл, бла-бла. у вас есть много вариантов. выберите один и идите с ним. –

+0

Не могли бы вы дать мне указатель? – Mahesh

+0

не могли бы вы рассказать мне, как мне это сделать или ссылку, которая поможет? Благодарю. – Mahesh

ответ

0

Если вы хотите вернуть SQL в JSON на комментарий Marc B, измените эту строку, чтобы быть, например:

print to_json({value => $html, sql => $sql}, {ascii => 1}); 

Это будет просто добавить еще один ключ/значение хэша, так что SQL будет возвращен. Другой способ сделать это - добавить к вашему скрипту ведение журнала, например Log4perl. При поиске есть другие параметры ведения журнала Perl.

+1

Привет, Zerodiff, я попытался включить sql в print to_json, как вы упомянули. Но не повезло. я не смог найти запрос на веб-странице. Должен ли я вносить какие-либо изменения в мой java-скрипт? Пожалуйста, порекомендуйте. Благодарю. – Mahesh

+0

Это не будет в HTML, если вы не поместите его туда ... другим решением было бы поместить его в HTML в качестве комментария, например. . Вам придется открыть отладчик JavaScript в вашем браузере, где это вызвано и просмотреть содержимое ответа JSON, или, например. вызов из 'curl' в командной строке. – zerodiff

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