YII 2 프레임 워 크 에서 yii. js 를 사용 하여 실 현 된 post 요청
yii 2 는 이러한 기능 을 모두 봉인 했다. 적당 한 곳 에서 그것 을 호출 하 는 방법 만 있 으 면 된다. yii 2 는 상 자 를 열 고 바로 사용 할 수 있 는 프레임 워 크 라 고 할 수 있다. 예 를 들 어 페이지 에 삭제 단 추 를 놓 고 단 추 를 누 르 면 post 요청 을 보 내 고 팝 업 확인 대화 상 자 를 꺼 낼 수 있다.만약 yii \ helpers \ Html 류 와 yii. js 가 없다 면, 당신 은 대량의 js / jquery 를 써 서 이 기능 을 실현 해 야 합 니 다.yii 2 를 사용 하면 다음 코드 가 실 현 됩 니 다.
// html
= Html::a(
' ',
[
'delete',
'id' => $id,
],
[
'data' => [
'confirm' => ' ?',
'method' => 'post',
],
]
)
?>
// html
페이지 에 다음 html 코드 를 생 성 합 니 다:
삭제
이 단 추 를 누 르 면 대화 상자 가 팝 업 됩 니 다. 삭제 확인 후 post 요청 을 보 냅 니 다.그럼 이 post 요청 은 어떻게 보 내 셨 나 요?지금까지 js 코드 도 안 썼 는데.
yii 2 프레임 워 크 는 기술 실현 의 세부 사항 을 숨 겼 고 post 요청 의 실현 은 yii. js 에 있 습 니 다.yii. js 에서 window. yii 대상 을 정의 하고 window. yii 대상 의 initModule 방법 을 초기 화 했 습 니 다.
window.yii = (function ($) {
var pub = {
// , :
confirm: function (message, ok, cancel) {
if (window.confirm(message)) {
!ok || ok();
} else {
!cancel || cancel();
}
},
handleAction: function ($e, event) {
var $form = $e.attr('data-form') ? $('#' + $e.attr('data-form')) : $e.closest('form'),
method = !$e.data('method') && $form ? $form.attr('method') : $e.data('method'),
//
},
//
};
//
initModule: function (module) {
if (module.isActive !== undefined && !module.isActive) {
return;
}
if ($.isFunction(module.init)) {
module.init();
}
$.each(module, function () {
if ($.isPlainObject(this)) {
pub.initModule(this);
}
});
},
//
init: function () {
initCsrfHandler();
initRedirectHandler();
initAssetFilters();
initDataMethods();
},
return pub;
})(window.jQuery);
window.jQuery(function () {
window.yii.initModule(window.yii);
});
그 중에서 위의 initDataMethods () 는 pub. handle Action 방법 을 호출 합 니 다.
function initDataMethods() {
var handler = function (event) {
var $this = $(this),
method = $this.data('method'),
message = $this.data('confirm'),
form = $this.data('form');
if (method === undefined && message === undefined && form === undefined) {
return true;
}
if (message !== undefined) {
$.proxy(pub.confirm, this)(message, function () {
pub.handleAction($this, event);
});
} else {
pub.handleAction($this, event);
}
event.stopImmediatePropagation();
return false;
};
// handle data-confirm and data-method for clickable and changeable elements
$(document).on('click.yii', pub.clickableSelector, handler)
.on('change.yii', pub.changeableSelector, handler);
}
이 방법 을 보면 위 에 생 성 된 a 태그 의 data 속성 값 을 가 져 와 handler Action 에 맡 길 수 있 습 니 다.handlerAction 은 동적 으로 form 을 생 성하 여 각종 요청 을 처리 하고 마지막 으로 submit 이 벤트 를 촉발 하여 제출 합 니 다.
//
$form = $('
', {method: method, action: action});var target = $e.attr('target');
if (target) {
$form.attr('target', target);
}
if (!/(get|post)/i.test(method)) {
$form.append($('', {name: '_method', value: method, type: 'hidden'}));
method = 'post';
$form.attr('method', method);
}
if (/post/i.test(method)) {
var csrfParam = pub.getCsrfParam();
if (csrfParam) {
$form.append($('', {name: csrfParam, value: pub.getCsrfToken(), type: 'hidden'}));
}
}
$form.hide().appendTo('body');
/ / 기타 생략
PS: 프로젝트 용 프레임 워 크 는 편리 하지만 프레임 워 크 를 오래 사용 하면 기본 적 인 기술 을 잊 어 버 리 기 쉽다.그래도 기 초 를 잘 다 져 야 지, 이렇게 하면 어떤 틀 도 사용 할 수 없 으 니, 구름 속 에 안개 속 에 있 을 정 도 는 아니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.