您的位置:首页 > Web前端 > JavaScript

Perl的CGI与Ajax(Extjs)交互

2013-05-08 17:45 267 查看
往perl后台提交数据
Extjs 按钮代码如下:
bbar:['->',
{	text:'save',
width:50,
handler:function(){
Ext.getCmp("panel1").getEl().mask("Saving data...","x-mask-loading");
var month = Ext.util.Format.date(Ext.getCmp("month").getValue(), 'Y-m');
Ext.Ajax.request({
url: "qam_basicdata_post.cgi?project_id=[% project_id %]&type=effort&month="+month+"-00",
params:{

//save review
nq_inspection_peer_review_requirement : store_review.findRecord("key","nq_inspection_peer_review_requirement").get("value"),
nc_inspection_peer_review_requirement : store_review.findRecord("key","nc_inspection_peer_review_requirement").get("value"),
nq_walkthrough_peer_review_requirement : store_review.findRecord("key","nq_walkthrough_peer_review_requirement").get("value"),
nc_walkthrough_peer_review_requirement : store_review.findRecord("key","nc_walkthrough_peer_review_requirement").get("value"),
total_peer_review_prepartion_effort_requirement : store_review.findRecord("key","total_peer_review_prepartion_effort_requirement").get("value"),
total_peer_review_meeting_effort_requirement : store_review.findRecord("key","total_peer_review_meeting_effort_requirement").get("value"),
total_peer_review_effort_requirement : store_review.findRecord("key","total_peer_review_effort_requirement").get("value"),
nc_inspection_peer_review_design_document : store_review.findRecord("key","nc_inspection_peer_review_design_document").get("value"),
nc_walkthrough_peer_review_design_document : store_review.findRecord("key","nc_walkthrough_peer_review_design_document").get("value"),
total_peer_review_prepartion_effort_design_document : store_review.findRecord("key","total_peer_review_prepartion_effort_design_document").get("value"),
total_peer_review_meeting_effort_design_document : store_review.findRecord("key","total_peer_review_meeting_effort_design_document").get("value"),
total_peer_review_effort_design_document : store_review.findRecord("key","total_peer_review_effort_design_document").get("value"),
nc_inspection_peer_review_test_design : store_review.findRecord("key","nc_inspection_peer_review_test_design").get("value"),
nc_walkthrough_peer_review_test_design : store_review.findRecord("key","nc_walkthrough_peer_review_test_design").get("value"),
total_peer_review_prepartion_effort_test_design : store_review.findRecord("key","total_peer_review_prepartion_effort_test_design").get("value"),
total_peer_review_meeting_effort_test_design : store_review.findRecord("key","total_peer_review_meeting_effort_test_design").get("value"),
total_peer_review_effort_test_design : store_review.findRecord("key","total_peer_review_effort_test_design").get("value"),
nc_inspection_peer_review_manual_code : store_review.findRecord("key","nc_inspection_peer_review_manual_code").get("value"),
nc_walkthrough_peer_review_manual_code : store_review.findRecord("key","nc_walkthrough_peer_review_manual_code").get("value"),
total_peer_review_prepartion_effort_manual_code : store_review.findRecord("key","total_peer_review_prepartion_effort_manual_code").get("value"),
total_peer_review_meeting_effort_manual_code : store_review.findRecord("key","total_peer_review_meeting_effort_manual_code").get("value"),
total_peer_review_effort_manual_code : store_review.findRecord("key","total_peer_review_effort_manual_code").get("value"),
nc_peer_review : store_review.findRecord("key","nc_peer_review").get("value"),
total_peer_review_prepartion_effort : store_review.findRecord("key","total_peer_review_prepartion_effort").get("value"),
total_peer_review_meeting_effort : store_review.findRecord("key","total_peer_review_meeting_effort").get("value"),
total_peer_review_effort : store_review.findRecord("key","total_peer_review_effort").get("value")

},
success: function(response, opts) {
Ext.getCmp("panel1").getEl().unmask();
Ext.toast.msg('Congratulations', 'Save Success!');
},
failure: function(response, opts) {
Ext.getCmp("panel1").getEl().unmask();
alert("Save failed!");
}
});
}},
'->']


qam_basicdata_post.cgi的响应如下:

#!/usr/bin/perl -w

use strict;
use lib qw(. lib);

use Bugzilla;
use Bugzilla::Util;
use Bugzilla::Metrics::MP;
use Bugzilla::Error;
use Bugzilla::Constants;
use Date::Parse;
use Date::Format;
use Bugzilla::Metrics::QAMBasic;

my $cgi = Bugzilla->cgi;
my $dbh = Bugzilla->dbh;

my $user = Bugzilla->login(LOGIN_REQUIRED);
my $userid = $user->id;

######################################################

my $project_id = trim($cgi->param('project_id')) || '';
#Bugzilla::Metrics::MP->manual_save($project_id, $cgi, 'size');
#my $initial = $cgi->param('total_initial') ;

my $month = $cgi->param('month');

my $field_value = Bugzilla::Metrics::QAMBasic->get_basicdata_effort_params($cgi,$project_id);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_effort($project_id,$field_value,$dbh,"qam_basicdata_effort" , $month);

my $size_values = Bugzilla::Metrics::QAMBasic->get_basicdata_size_params($cgi);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_size($project_id,$size_values,$dbh,"qam_basicdata_size", $month);

my $test_values = Bugzilla::Metrics::QAMBasic->get_basicdata_test_params($cgi);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_test($project_id,$test_values,$dbh,"qam_basicdata_test", $month);

my $testmodel_values = Bugzilla::Metrics::QAMBasic->get_basicdata_testmodel_params($cgi);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_testmodel($project_id,$testmodel_values,$dbh,"qam_basicdata_testmodel", $month);

my $problem_values = Bugzilla::Metrics::QAMBasic->get_basicdata_problem_params($cgi);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_problem($project_id,$problem_values,$dbh,"qam_basicdata_problem", $month);

my $review_values = Bugzilla::Metrics::QAMBasic->get_basicdata_review($cgi);
Bugzilla::Metrics::QAMBasic->save_edited_basicdata_review($project_id,$review_values,$dbh,"qam_basicdata_review", $month);

######################################################

print $cgi->header(-type => "application/json", -charset => "utf-8");
print "{success:true}"


从后台动态取数据:

Extjs的Store代码如下:

//store
var store_effort = Ext.create('Ext.data.JsonStore', {
fields: ['name' , 'value' ,'reference_value',  'key','unit'],
proxy: {
type: 'ajax',
url: 'qam_basicdata_ajax.cgi',
reader: {
type: 'json',
root: 'result'
}
}
});
var month = Ext.util.Format.date(Ext.getCmp("month").getValue(), 'Y-m') + '-00';
//load date
store_effort.load({
params: {
project_id : [% project_id %],
type : 'effort',
month : month
}
});


后台响应qam_basicdata_ajax.cgi如下:

#!/usr/bin/perl -w

use strict;

# Include the Bugzilla CGI and general utility library.
use lib qw(. lib);

use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::User;
use Bugzilla::Util;
use Bugzilla::Project;
use Bugzilla::Metrics::MP;
use Bugzilla::Metrics::QAMBasic;

# Check whether or not the user is logged in
my $user = Bugzilla->login(LOGIN_REQUIRED);
my $cgi = Bugzilla->cgi;
my $template = Bugzilla->template;
my $vars = {};
#my $dbh = Bugzilla->dbh;

$vars->{'section'} = trim($cgi->param('section')) || '';
$vars->{'format'} = trim($cgi->param('format')) || '';
my $project_id = trim($cgi->param('project_id')) || '';
my $month = trim($cgi->param('month')) || '';

#mikeba, Jan 11th, for the synchronization of database. Later should be replaced by permission
my $dbh = Bugzilla::DBSynchronize->dbh_project($project_id);
$vars->{'is_local'} = Bugzilla::DBSynchronize->dbh_is_local_project($project_id);
$vars->{'site_name'} = Bugzilla::DBSynchronize->dbh_get_sitename_project($project_id);

#my $project_id = $dbh->selectrow_array("select project_id from projects where name = '$project_name'");
$vars->{'project_id'} = $project_id;
$vars->{'project_name'} = $dbh->selectrow_arrayref("select name from projects where project_id = ?",undef,$project_id)->[0];

#################################################################

my $type = $cgi->param('type');

my $json = '';
if($type eq 'effort'){
#1. Get basic data:efforts
$vars->{'basic'} = Bugzilla::Metrics::QAMBasic->get_old_efforts($dbh, $project_id);
my $edited_basic_data = Bugzilla::Metrics::QAMBasic->get_edited_efforts("qam_basicdata_effort", $dbh,$project_id , $month);
$json = "{'result':[
{'name' : 'Total Initial' , 'reference_value' : 1 , 'key' : 'total_initial' , 'value' : '$edited_basic_data->{'total_initial'}' , 'unit' : 'Staff Day'},
{'name':'Total Project Management','reference_value':1,'key':'total_project_management' ,'value':'$edited_basic_data->{'total_project_management'}','unit':'Staff Day'},
{'name':'Total Requirement Elicitation Effort','reference_value':'1','key':'total_requirement_elicitation' ,'value':'$edited_basic_data->{'total_requirement_elicitation'}','unit':'Staff Day'},
{'name':'Total Requirement Analysis Effort','reference_value':'1','key':'total_requirement_analysis_effort' ,'value':'$edited_basic_data->{'total_requirement_analysis_effort'}','unit':'Staff Day'},
{'name':'Total HighLevel Modeling Developing Effort','reference_value':'1','key':'total_high_level_modeling_developing_effort' ,'value':'$edited_basic_data->{'total_high_level_modeling_developing_effort'}','unit':'Staff Day'},
{'name':'Total HighLevel Modeling Testing Effort','reference_value':'1','key':'total_high_level_modeling_testing_effort' ,'value':'$edited_basic_data->{'total_high_level_modeling_testing_effort'}','unit':'Staff Day'},
{'name':'Total Model Architecture Effort','reference_value':'1','key':'total_model_architecture_effort' ,'value':'$edited_basic_data->{'total_model_architecture_effort'}','unit':'Staff Day'},
{'name':'Total Interface Design Effort','reference_value':'1','key':'total_interface_design_effort' ,'value':'$edited_basic_data->{'total_interface_design_effort'}','unit':'Staff Day'},
{'name':'Total Interface Testing Effort','reference_value':'1','key':'total_interface_testing_effort' ,'value':'$edited_basic_data->{'total_interface_testing_effort'}','unit':'Staff Day'},
{'name':'Total LowLevel Modeling Developing Effort','reference_value':'1','key':'total_lowLevel_modeling_developing_effort' ,'value':'$edited_basic_data->{'total_lowLevel_modeling_developing_effort'}','unit':'Staff Day'},
{'name':'Total Low Level Modeling Testing Effort','reference_value':'1','key':'total_low_level_modeling_testing_effort' ,'value':'$edited_basic_data->{'total_low_level_modeling_testing_effort'}','unit':'Staff Day'},
{'name':'Total Hand Written Code Design Effort','reference_value':'1','key':'total_hand_written_code_design_effort' ,'value':'$edited_basic_data->{'total_hand_written_code_design_effort'}','unit':'Staff Day'},
{'name':'Total Coding Effort','reference_value':'1','key':'total_coding_effort' ,'value':'$edited_basic_data->{'total_coding_effort'}','unit':'Staff Day'},
{'name':'Total External Code UT Effort','reference_value':'1','key':'total_external_code_ut_effort' ,'value':'$edited_basic_data->{'total_external_code_ut_effort'}','unit':'Staff Day'},
{'name':'Total Integration Testing Effort','reference_value':'1','key':'total_integration_testing_effort' ,'value':'$edited_basic_data->{'total_integration_testing_effort'}','unit':'Staff Day'},
{'name':'Total System Testing Effor','reference_value':'1','key':'total_system_testing_effort' ,'value':'$edited_basic_data->{'total_system_testing_effort'}','unit':'Staff Day'},
{'name':'Total Release Effort','reference_value':'1','key':'total_release_effort' ,'value':'$edited_basic_data->{'total_release_effort'}','unit':'Staff Day'},
{'name':'Total Maintenance Effort','reference_value':'1','key':'total_maintenance_effort' ,'value':'$edited_basic_data->{'total_maintenance_effort'}','unit':'Staff Day'},
{'name':'Total QA Effort','reference_value':'1','key':'total_qa_effort' ,'value':'$edited_basic_data->{'total_qa_effort'}','unit':'Staff Day'},
{'name':'Total CM Effort','reference_value':'1','key':'total_cm_effort' ,'value':'$edited_basic_data->{'total_cm_effort'}','unit':'Staff Day'},
{'name':'Total US Team Effort','reference_value':'1','key':'total_us_team_effort' ,'value':'$edited_basic_data->{'total_us_team_effort'}','unit':'Staff Day'},
{'name':'Total Training Effort','reference_value':'1','key':'total_training_effort' ,'value':'$edited_basic_data->{'total_training_effort'}','unit':'Staff Day'},
{'name':'Total Schedule Changes Dueto Requirement Changes','reference_value':'1','key':'total_schedule_changes_dueto_requirement_changes' ,'value':'$edited_basic_data->{'total_schedule_changes_dueto_requirement_changes'}','unit':'Staff Day'},
{'name':'Total Document Effort','reference_value':'1','key':'total_document_effort' ,'value':'$edited_basic_data->{'total_document_effort'}','unit':'Staff Day'},
{'name':'Total Efforts','key':'total_efforts' ,'value':'$edited_basic_data->{'total_efforts'}','unit':'Staff Day'},
{'name':'Total Documentation Effort Percentage','reference_value':'1','key':'total_documentation_effort_percentage' ,'value':'$edited_basic_data->{'total_documentation_effort_percentage'}','unit':'%'}
]}";

}
print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: