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;
相关文章推荐
- extJs学习基础3 ajax与php交互
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
- [ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置
- Extjs学习总结之11前端与后台的数据交互ajax
- [ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置
- [ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置
- ExtJs 入门教程二十[数据交互:AJAX]
- 哈哈,找到一种方式来简单模拟EXTJS中与服务器的AJAX交互啦。
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
- HBuilder+MUI编写一个登录页面(Ajax交互)
- ExtJS的Ajax提交超时设置
- extJs常用的四种Ajax异步提交
- ExtJS(三)--Ajax实现省份城市联动
- Extjs、ASP.net前后台Grid分页 数据库多表交互(转)
- Extjs 使用ajax上传文件,解决Object #<HTMLDivElement> has no method 'submit'
- AJAX 通用与服务器段交互代码范例 客户端未传入参数-----请求servlet
- 4、Ajax与Java交互的案例
- Ajax之前后台简单交互---登录实现
- 如何让iis支持PHP+MYSQL,CGI,PERL和ASP