フォーム送信をしようとしています。フォームを送信する前に、jquery 検証プラグインを使用して入力を検証します。検証が完了したら、jquery で ajax リクエストをコントローラーのコントローラー関数に送信します。データベースに挿入されて表示された値を確認できるので、入力の挿入は成功しています。ただし、コールバックはエラーを返します。フィールドの 1 つを空のままにしてみましたが、実際には成功のコールバックが返されます。
私の検証スクリプトは次のとおりです
$("#registerHere").validate({
rules:{
user_name:"required",
user_email:{
required:true,
email: true
},
pwd:{
required:true,
minlength: 6
},
cpwd:{
required:true,
equalTo: "#pwd"
},
role:"required"
},
messages:{
user_name:"Enter your first and last name",
user_email:{
required:"Enter your email address",
email:"Enter valid email address"
},
pwd:{
required:"Enter your password",
minlength:"Password must be minimum 6 characters"
},
cpwd:{
required:"Enter confirm password",
equalTo:"Password and Confirm Password must match"
},
role:"Select Role"
},
errorClass: "help-inline",
errorElement: "span",
highlight:function(element, errorClass, validClass) {
$(element).parents('.control-group').addClass('error');
},
unhighlight: function(element, errorClass, validClass) {
$(element).parents('.control-group').removeClass('error');
$(element).parents('.control-group').addClass('success');
},
});
私のjquery ajax postメソッドは次のとおりです
$('#register').click(function(){
//alert('register k');
var user_name = $('#registerHere').find('#user_name').val();
var user_password = $('#registerHere').find('#pwd').val();
var user_email = $('#registerHere').find('#user_email').val();
var user_role = $('#registerHere').find('#role option:selected').val();
//if(user_name =="" || user_password==""||user_email==""||user_role=="")
//return;
var post_data =
{
username:user_name,
password:user_password,
email:user_email,
role:user_role
};
$.ajax({
type: "POST",
dataType:"json",
url:"login_register/register_controller_function",
data: post_data,
success: function(data) {
alert(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert(textStatus);
}
});
});
私のコントローラースクリプト
public function register_controller_function()
{
$this->load->database();
$this->load->model('login_model');
$user_name=$this->input->post('username');
$user_password=$this->input->post('password');
$user_email=$this->input->post('email');
$user_role=$this->input->post('role');
$result = $this->login_model->register_model_function($user_name,$user_password,$user_email,$user_role);
echo json_encode($result);
}
ここで、register_model_function はデータベースへの値の挿入を行います。
デバッガーを使用してリクエストを確認すると、わずかに異なります。
成功のコールバックがあるフィールドを空のままにしておくと、リクエストヘッダーは次のようになります
Request URL:http://127.0.0.1/mathplication_v2/login_register/register_controller_function
Request Method:POST
Status Code:200 OK
POST /mathplication_v2/login_register HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Content-Length: 72
Cache-Control: max-age=0
Origin: http://127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://127.0.0.1/mathplication_v2/login_register
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
エラー コールバックが発生するフィールドに入力すると、リクエスト ヘッダーは次のようになります。
Request URL:http://127.0.0.1/mathplication_v2/login_register
Request Method:POST
Status Code:200 OK
POST /mathplication_v2/login_register HTTP/1.1
Host: 127.0.0.1
Connection: keep-alive
Content-Length: 72
Cache-Control: max-age=0
Origin: http://127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://127.0.0.1/mathplication_v2/login_register
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
リクエストの URL は異なりますが、私の jquery での ajax リクエストでは、コントローラーの URL を既に指定しています。
何が間違っているのですか?