【问题标题】:Debugging with HTML JSON使用 HTML JSON 进行调试
【发布时间】:2015-02-17 09:04:39
【问题描述】:

如图所示,我有一个打印为 JSON 的 perl cgi 脚本。

这有 2 个部分。第 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);


                }
        );

}

【问题讨论】:

  • 您正在返回 json。您可以轻松地将查询字符串添加到 json 中某处的另一个参数中。您可以将其转储到文件中,等等。你有很多选择。选择一个并使用它。
  • 你能给我指点吗?
  • 你能告诉我我该怎么做,或者一个链接会有所帮助吗?谢谢。

标签: javascript jquery html json perl


【解决方案1】:

如果您想根据 Marc B 的评论以 JSON 格式返回 SQL,请将此行更改为,例如:

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

这只会将另一个键/值添加到哈希中,以便返回 SQL。另一种方法是在脚本中添加日志记录,例如Log4perl。如果您搜索,还有其他 Perl 日志记录选项。

【讨论】:

  • 您好 Zerodiff,正如您所提到的,我尝试在 print to_json 中包含 sql。但没有运气。我在网页中找不到查询。我应该对我的 java 脚本进行任何更改吗?请指教。谢谢。
  • 除非你把它放在那里,否则它不会出现在 HTML 中......另一种解决方案是将它作为注释放在 HTML 中,例如。您必须在浏览器中打开调用它的 JavaScript 调试器并查看 JSON 响应内容,或者,例如在命令行上从curl 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 2021-01-21
  • 2011-07-26
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多