这是我在codeIgniter中的第一个项目。这里我试图使用Validator控制器类的form_submit()方法验证表单...我使用jquery的ajax方法通过调用get_cities()方法和Validator控制器的get_sub_category()方法在我的表单中生成两个下拉字段。值得一提的是我正在使用外部dropdown.js文件,该文件已与表单视图链接。这是dropdown.js文件
$(document).ready(function () {
$('#city_h').hide();
$('#sub_category_h').hide();
//function to dynamically populate CITY according to STATE
$('#state').change(function () {
var state_id = $('#state').val();
var state_id = state_id.trim();
if (state_id/* != ""*/) {
//Need to handle form submission more efficiently
/**
* For the time being, i am checking if the user has submitted the form or not
* By the following if else block but in future i will try to handle it from CONTROLLER
*/
if ($(location).attr('href') == "http://localhost/ci_practice/") {
var post_url = "index.php/validator/get_cities/" + state_id;
} else {
var post_url = "get_cities/" + state_id;
}
//Need to handle form submission more efficiently
$.ajax({
type: "POST",
url: post_url,
success: function (cities) //we're calling the response json array 'cities'
{
$('#city').empty();
$('#city_h').show();
$.each(cities, function (ci_id, ci_name)
{
var opt = $('<option />'); // here we're creating a new select option for each group
opt.val(ci_id);
opt.text(ci_name);
$('#city').append(opt);
});
} //end success
}); //end AJAX
} else {
$('#city').empty();
$('#city_h').hide();
}//end if
}); //end change
//function to dynamically populate SUBCATEGORY according to CATEGORY
$('#category').change(function () {
var category_id = $('#category').val();
var category_id = category_id.trim();
if (category_id/* != ""*/) {
//Need to handle form submission more efficiently
/**
* For the time being, i am checking if the user has submitted the form or not
* By the following if else block but in future i will try to handle it from CONTROLLER
*/
if ($(location).attr('href') == "http://localhost/ci_practice/") {
var post_url = "index.php/validator/get_sub_category/" + category_id;
} else {
var post_url = "get_sub_category/" + category_id;
}
//Need to handle form submission more efficiently
$.ajax({
type: "POST",
url: post_url,
success: function (subcategories) //we're calling the response json array 'cities'
{
$('#sub_category').empty();
$('#sub_category_h').show();
$.each(subcategories, function (sc_id, sc_name)
{
var opt = $('<option />'); // here we're creating a new select option for each group
opt.val(sc_id);
opt.text(sc_name);
$('#sub_category').append(opt);
});
} //end success
}); //end AJAX
} else {
$('#sub_category').empty();
$('#sub_category_h').hide();
}//end if
}); //end change
});
这里是Validator控制器........
public function form_submit(){
//all form validation code goes here
}
public function get_cities($state){
//this method is called from dropdown.js file to populate subcategory dropdown
//but when url changes... this function become unaccessible by dropdown.js
header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode($this->form_model->get_cities_by_state($state)));
}
public function get_sub_category($category){
//this method is called from dropdown.js file to populate subcategory dropdown
//but when url changes... this function become unaccessible by dropdown.js
header('Content-Type: application/x-json; charset=utf-8');
echo(json_encode($this->form_model->get_subcategory_by_category($category)));
}
}`
所以当我提交表单以验证失败时,它会转到url(http://localhost/ci_practice/index.php/validator/form_submit),然后jquery的ajax方法无法访问Validator控制器的get_cities()
方法和get_sub_category()
方法,所以我无法重新填充我的下拉列表。怎么处理这个问题?目前我正在使用这个解决方案
/**
* For the time being, i am checking if the user has submitted the form or not
* By the following if else block but this is not a portable solution
*/
if($(location).attr('href')=="http://localhost/ci_practice/"){
var post_url = "index.php/validator/get_cities/"+state_id;
} else{
var post_url ="get_cities/"+state_id;
}
在我的外部javascript文件中,但我认为这不是一个可移植的解决方案。
答案 0 :(得分:0)
Problme解决了.........只需要在var post_url
外部dropdown.js
文件中使用完整网址,例如localhost / ci_practice / index.php / validator / get_sub_category而不是相对url like(index.php / validator / get_cities /)