양식을 Validate하고 Ajax와 통신
했던 일
jQuery를 사용하여 다음과 같은 흐름을 만들었습니다.
내용 상세
BootStrap 모달 대화상자
위의 이미지와 같은 대화 상자를 만듭니다.
출처
길기 때문에 form 부분은 생략하고 있습니다.
<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="my![20160924191256.png](https://qiita-image-store.s3.amazonaws.com/0/109149/ab030a9c-96b3-473a-c56a-7b5d0fe1ad67.png)
LargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<!-- モーダルのヘッダ -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="modal-label">ダイアログ</h4>
</div>
<!-- モーダルのボディ -->
<div class="modal-body">
<form id="addHotel">
:
</form>
</div>
<!-- モーダルのフッタ -->
<div class="modal-footer">
<div id="response_parameter" ></div>
<button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button>
<button type="button" id="addBtn" class="btn btn-primary">保存</button>
</div>
</div>
</div>
</div>
:
<!-- モーダル開くボタン -->
<button class="btn btn-warning" data-toggle="modal" data-target=".bd-example-modal-lg">Add Hotel</button>
Validate 과 Ajax
위의 이미지와 같은 Validate 처리를 jQuery Validation Plugin을 사용하여 구현했습니다.
출처
//カスタムvalidateの作成
//ここでは英大文字のみを正規表現で判定
jQuery.validator.addMethod("uppercase", function(value, element) {
return this.optional(element) || /^[A-Z]+$/.test(value);
}, "Please input uppercase");
//validateのoption作成
var hotelValid = {
//入力欄別にルールを作成
rules:{
name:{
required:true
},
address:{
required:true
},
countryCode:{
required:true,
minlength:2,
uppercase:true
},
cityCode:{
required:true,
minlength:3,
uppercase:true
},
grade:{
required:true
},
facility:{
required:true
},
imagePath:{
required:true,
url:true
},
},
//messageを自分好みに設定
messages:{
countryCode:{
minlength:"Country code must be 2 characters."
},
cityCode:{
minlength:"City code must be 3 characters."
}
}
}
$(function(){
//ボタンクリックで発火
$("#addBtn").click(function(){
//validate実行(作成したvalidateのoptionを指定)
$("#addHotel").validate(hotelValid);
//失敗で戻る
if (!$("#addHotel").valid()) {
return false;
};
//Ajaxでform入力内容送信
$.ajax( {
type: "POST",
url: "/hotel/add",
dataType: "json",
data: {
"name" : $('#name').val(),
"address" : $('#address').val(),
"countryCode" : $('#countryCode').val(),
"cityCode" : $('#cityCode').val(),
"grade" : $('#grade').val(),
"facility" : $('#facility').val(),
"imagePath" : $('#imagePath').val()
}
//成功で作成したホテルIdをアラートで表示
}).done(function( response ){
alert( "Hotel Id = " + response.data.hotel.id + " added." );
//失敗もアラートで通知
}).fail(function( data ){
alert( "faild" );
});
});
})
간단한 댓글을 추가했습니다.
Ajax에서 아래와 같이 success :
와 같은 쓰기를 하면 비동기 처리 때문에 response.data.hotel.id
의 부분을 얻을 수 없습니다.
$.ajax({
url: "ajax.html",
success: function(data) {
alert('success!!');
},
error: function(data) {
alert('error!!!');
}
});
callback으로 잘 처리의 순서를 제어할 수 있다고 하지만, jQuery1.8 이상에서는 이용자의 의도에 따른 처리를 done/fail로 실시할 수 있으므로 편리하네요.
편리하다고 생각하면서, 이대로 진행하면 callback의 사용법을 제대로 공부하지 않고 진행해 버릴 것 같기 때문에 제대로 구조도 이해해 가고 싶습니다.
Reference
이 문제에 관하여(양식을 Validate하고 Ajax와 통신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/bbbks9/items/acb57aece31f0d7f765b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="my![20160924191256.png](https://qiita-image-store.s3.amazonaws.com/0/109149/ab030a9c-96b3-473a-c56a-7b5d0fe1ad67.png)
LargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<!-- モーダルのヘッダ -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span>
</button>
<h4 class="modal-title" id="modal-label">ダイアログ</h4>
</div>
<!-- モーダルのボディ -->
<div class="modal-body">
<form id="addHotel">
:
</form>
</div>
<!-- モーダルのフッタ -->
<div class="modal-footer">
<div id="response_parameter" ></div>
<button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button>
<button type="button" id="addBtn" class="btn btn-primary">保存</button>
</div>
</div>
</div>
</div>
:
<!-- モーダル開くボタン -->
<button class="btn btn-warning" data-toggle="modal" data-target=".bd-example-modal-lg">Add Hotel</button>
//カスタムvalidateの作成
//ここでは英大文字のみを正規表現で判定
jQuery.validator.addMethod("uppercase", function(value, element) {
return this.optional(element) || /^[A-Z]+$/.test(value);
}, "Please input uppercase");
//validateのoption作成
var hotelValid = {
//入力欄別にルールを作成
rules:{
name:{
required:true
},
address:{
required:true
},
countryCode:{
required:true,
minlength:2,
uppercase:true
},
cityCode:{
required:true,
minlength:3,
uppercase:true
},
grade:{
required:true
},
facility:{
required:true
},
imagePath:{
required:true,
url:true
},
},
//messageを自分好みに設定
messages:{
countryCode:{
minlength:"Country code must be 2 characters."
},
cityCode:{
minlength:"City code must be 3 characters."
}
}
}
$(function(){
//ボタンクリックで発火
$("#addBtn").click(function(){
//validate実行(作成したvalidateのoptionを指定)
$("#addHotel").validate(hotelValid);
//失敗で戻る
if (!$("#addHotel").valid()) {
return false;
};
//Ajaxでform入力内容送信
$.ajax( {
type: "POST",
url: "/hotel/add",
dataType: "json",
data: {
"name" : $('#name').val(),
"address" : $('#address').val(),
"countryCode" : $('#countryCode').val(),
"cityCode" : $('#cityCode').val(),
"grade" : $('#grade').val(),
"facility" : $('#facility').val(),
"imagePath" : $('#imagePath').val()
}
//成功で作成したホテルIdをアラートで表示
}).done(function( response ){
alert( "Hotel Id = " + response.data.hotel.id + " added." );
//失敗もアラートで通知
}).fail(function( data ){
alert( "faild" );
});
});
})
$.ajax({
url: "ajax.html",
success: function(data) {
alert('success!!');
},
error: function(data) {
alert('error!!!');
}
});
Reference
이 문제에 관하여(양식을 Validate하고 Ajax와 통신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bbbks9/items/acb57aece31f0d7f765b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)