-1

以下是我的 process.cgi 文件的开头:

#!/usr/bin/perl -wT
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use strict;
#use CGI::Ajax;

#print "sddsdsd";
print header;
print start_html("Results");

use lib qw(.);
use Bugzilla;
use DbSlaveConnect;
#require "process_bug.cgi";
my $dbslaveconnect;
$dbslaveconnect = &DbSlaveConnect();

my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;
my $template = Bugzilla->template;
my $vars = {};
print "content-type: text/html \n\n";
print $cgi->param("value1");

以下是我在 jquery 中的 ajax 代码:

var value1 = jQuery(this).find("INPUT").val();
$.ajax({
    url: 'process.cgi?'+value1,

    // The type of request.
    type: "get",

    // The type of data that is getting returned.

    error: function(){
        ShowStatus( "AJAX - error()" );

        // Load the content in to the page.
        jContent.html( "<p>Page Not Found!!</p>" );
    },

    success: function( data ){
        alert('success');
    }
});

以下是我的输出:

在此处输入图像描述

我编辑了第一行,我检查了fire bug,发现值正在传递,但我无法在我的cgi页面中检索它。在cgi页面中检索值的格式是什么,以下是我的火灾错误输出:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

目前我尝试使用以下格式检索值: print $cgi->param("value1");

在我的 cgi 页面中是否需要任何其他包来获取值,就像使用 CGI::Ajax.please help me???

4

2 回答 2

2

为您的通话添加data设置:$.ajax()

   var value1 = jQuery(this).find("INPUT").val();
   $.ajax({
       url: 'process.cgi',
       data : { 'value1' : value1 },
       type: "get"    
       error: function () {
           ShowStatus("AJAX - error()");

           jContent.html("<p>Page Not Found!!</p>");
       },    
       success: function (data) {
           alert('success');
       }
   });

当包括这个:

data : { 'value1' : value1 }

'value1'...它告诉 jQuery 使用参数名称和变量中的任何值向请求添加参数value1

您拥有的代码:

url : 'process.cgi?'+value1

...正在将用户直接输入的值添加到查询字符串中,而不给它一个参数名称,例如,如果他们输入“test”,你会得到这个 URL:

process.cgi?test

...当你想要的是:

process.cgi?value1=test
于 2013-06-29T06:02:24.153 回答
1

我已经在本地测试了您的 Perl 代码,它正确地解析了 HTTP 请求中的参数。因此,如果它在您的端不起作用,那一定是因为您的网页没有发出有效的请求。

如果您打开浏览器并仅访问会发生什么http://localhost/process.cgi?value1=foo

(您可能需要将“localhost”更改为您正在测试的服务器。)

更新:正如 innaM 在评论中指出的那样,我应该明确表示我无法测试 DbSlaveConnect 部分,因为我无权访问该模块。调用DbSlaveConnect()可能会以某种方式失败。

于 2013-06-29T09:23:26.940 回答