javascript - 如何从 perl 脚本发送准备显示的 html?

标签 javascript html ajax perl jquery

  #!/usr/bin/perl 
  # perl cgi script products2.cgi 


use DBI;
print <<END_HTML;
Content-type: text/html
END_HTML
my $host = "xxx.xxx.xxx";
my $port = "xxxx";
my $database = "proj4";
my $username = "xxxxxx";
my $password = "xxxxx";
my $database_source = "dbi:mysql:$database:$host:$port";


my $dbh = DBI->connect($database_source, $username, $password) 
or die 'Cannot connect to db';

my $sth = $dbh->prepare("SELECT distinct category FROM products");
$sth->execute();

#getting the categories and displaying them
while(my @row=$sth->fetchrow_array()) {
my $data =$row[0];
 my @values = split(' ',$data);
my $pic = "/~xxxx/proj4/images/".$values[0].".jpg";
print <<END_HTML;
<div class="view view-first">
END_HTML

print"<img src=\"$pic\" alt=\"$row[0]\"/>"; 
print "<h2 class=\"choc\"><span>$row[0]</span></h2>";
print "<div class=\"mask\">"; 
print "<h2 class=\"eff\">\"$row[0]\"</h2>";
print <<END_HTML; 
 <p>One of Our best sellers</p>  
     <a href="#" class="info $values[0]">Discover</a>  
 </div>   
 </div>  
END_HTML
 }


 $sth->finish();
 $dbh->disconnect();

我正在尝试替换

的内容
  <div id="content"></div> 

在我的 proj.html 中,单击导航栏中的“产品”链接时,将上述 perl 脚本的输出添加到其中。

//产品导航栏

 <li>
<a href="/perl/xxxxx/products2.cgi" id="productit">
Products
</a>
 </li>

我知道我必须使用 javascript 和 ajax,但不知道该怎么做。

 $('#productit').bind('click', function() {

 var handle = document.getElementById('content');

  var req = new HttpRequest('/perl/xxxxx/products2.cgi', callback); 
  //i know this ajax call only expects string to be returned from server
 req.send();  

 handle.innerHTML= //not sure how to populate this                  
 });

有人可以指导我如何从 perl 脚本发送准备显示的 html

最佳答案

您所要做的就是print HTML 并将其发送到客户端/浏览器。

但是...

我注意到 Perl 代码中的一个小细节会导致 Web 服务器抛出 500 内部服务器错误:您忘记在 HTTP header 后打印一个空行。发布的代码将发送输出

Content-type: text/html
<div class="view view-first">
...

这不是有效的 HTTP 响应,因为 <div不是可识别的 HTTP header 。需要发送

Content-type: text/html

<div class="view view-first">
...

相反,在内容开始之前用一个空行来指示标题的结束。

这就是为什么使用 Web 框架(例如 DancerMojoliciousCatalyst )甚至神秘的 CGI.pm 通常是一个好主意的原因之一。而不是手动处理这些事情:有很多小细节和奇怪的边缘情况,你需要做得恰到好处,否则它将无缘无故地无法工作。如果这是一个学习练习,那么自己动手就可以了,并且了解所有这些陷阱在哪里也很好,但是您最好使用广泛使用且经过良好测试的模块来在代码中处理它们,其目的是有用或重要的东西。

关于javascript - 如何从 perl 脚本发送准备显示的 html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717086/

相关文章:

javascript - 以编程方式从单个 HTML 元素中删除 CSS 样式规则

python - 如何保持愉快的 session 彼此不同

php - AJAX PHP文件上传和解析示例

Javascript:如何在 jQuery 中编写这个放置事件?

javascript - RightJS 上的 PJAX

jQuery Accordion 面板不会折叠

html - CSS 3 列在 Chrome 中不起作用

javascript - knockout : Asynchronous call in model binding

javascript - 使用 Axios 在 Microsoft Teams 中发布消息

javascript - 如何将 for 循环中的每个项目添加到 ReactJS 数组中