'Ajax'에 해당되는 글 2건

  1. 2014.07.17 jQuery Ajax Sample
  2. 2014.07.17 jQuery Ajax 사용하기

jQuery Ajax Sample

Posted by 단순대왕 jQuery : 2014. 7. 17. 11:59

모터 사이클 부츠 온라인 판매 사이트 - 출처: jQuery in Action;인사이트 -

[1단계]

$(function(){

// 부츠의 style을 옵션으로 로딩...

$('#bootChooserControl').load(/action/fetchBootStyleOptions');

// 부츠의 style을 선택하면 상세정보 출력

$('#bootChooserControl').change(function(event){

$('#productDetailPane').load(

'action/fetchProductDetails',        // URL

{style:$(event.target).val()},        // Parameter

function(){ $('[value=""]', event.target).remove(); }    // callback

// context > event.target 에서 value=''인 엘리먼트 삭제

);

});

});

load() 대신 $.get() 사용하기

$('#bootChooserControl').change(function(event){

$.get(

'action/fetchProductDetails',

{style:$(event.target).val()},

function(response){ 

$('#productDetailPane').html(response);

$('[value=""]', event.target).remove(); 

}

);

});

[2단계]

$(function() {

$('#bootChooserControl').load('/html5_ex/bootcloset/actions/fetchBootStyleOptions.php');

$('#bootChooserControl').change(function(event){

$('#productDetailPane').load(

'/html5_ex/bootcloset/actions/fetchProductDetails.php',

$(this).serialize()

);

$('#colorChooserControl').load(

'/html5_ex/bootcloset/actions/fetchColorOptions.php',

$(this).serialize(),

function(){

$(this).attr('disabled',false);

$('#sizeChooserControl').attr('disabled',true).html("");

}

);

});

$('#colorChooserControl').change(function(event){

$('#sizeChooserControl').load(

'/html5_ex/bootcloset/actions/fetchSizeOptions.php',

$('#bootChooserControl, #colorChooserControl').serialize(),

function(){

$(this).attr('disabled',false);

}

);

});

$('#selectionsPane').change(function(event){

$('[value=""]',event.target).remove();

});

});

[3단계] 

phase.4a.html

$(function() {

$('#bootChooserControl').load('/html5_ex/bootcloset/actions/fetchBootStyleOptions.php');

$('#bootChooserControl').change(function(event){

$('#productDetailPane').load(

'/html5_ex/bootcloset/actions/fetchProductDetails.php',

$('#bootChooserControl').serialize(),

function(){ $('abbr').termifier('/html5_ex/bootcloset/actions/fetchTerm.php'); }

// load 된 html에 포함된 <tag>에 사용 - callback 함수

);

$('#colorChooserControl').load(

'/html5_ex/bootcloset/actions/fetchColorOptions.php',

$('#bootChooserControl').serialize(),

function(){

$('#colorChooserControl').attr('disabled',false);

$('#sizeChooserControl')

.attr('disabled',true)

.find('option').remove();

}

);

});

$('#colorChooserControl').change(function(event){

$('#sizeChooserControl').load(

'/html5_ex/bootcloset/actions/fetchSizeOptions.php',

$('#bootChooserControl,#colorChooserControl').serialize(),

function(){ $('#sizeChooserControl').attr('disabled',false); }

);

});

$('#selectionsPane').change(function(event){

$('[value=""]',event.target).remove();

});

$('body').ajaxComplete(function(event, xhr, options){

//options: $.ajax(options)의 options

// #productDetailPane 이 load 되면

if (options.url.indexOf('fetchProductDetails') != -1) {

$('div.termifier').remove();

}

});

});

[jquery.termifier.js]

jquery.jqia.termifier.js

(function($){

$.fn.termifier = function(actionURL, options) {

var settings = $.extend({

origin: {top:0, left:0},

paramName: 'term',

addClass: null,

actionURL: actionURL

},options||{});

     this.click(function(event){

$('div.termifier').remove();

$('<div>')

.addClass('termifier' + (settings.addClass ? (' ') + settings.addClass : ''))

.css({

position: 'absolute',

top: event.pageY - settings.origin.top,

left: event.pageX - settings.origin.left,

display: 'none'

})

.click(function(event){

$(this).fadeOut('slow');

})

.appendTo('body')

.append(

$('<div>').load(

settings.actionURL,

encodeURIComponent(settings.paramName) + '=' + encodeURIComponent($(event.target).text()),

function(){ $(this).closest('.termifier').fadeIn('slow'); }

)

);

});    

this.addClass('termified');

return this;

};

})(jQuery);


'jQuery' 카테고리의 다른 글

jQuery 다시 보기  (0) 2014.07.31
jQuery jqXHR 객체  (0) 2014.07.18
jQuery Ajax 사용하기  (0) 2014.07.17
jQuery API - triggerHandler/ toggle/ proxy/ delegate/  (0) 2014.07.16
jQuery 확장 메소드 만들기  (0) 2014.07.16
  

jQuery Ajax 사용하기

Posted by 단순대왕 jQuery : 2014. 7. 17. 10:48

load(url, parameters, callback)

- URL과 선택적인 요청 매개변수로 Ajax 요청을 전송한다. 콜백 함수는 요청이 완료되면 호출되며,

DOM이 수정된다.

- 응답으로 반환된 엘리먼트를 필터링할 때도 있다. 그럴 때는 요청 URL에 셀렉터를 추가한다.

요청 URL은 접미사로 공백과 셀렉터를 붙여서 확장 엘리먼트에 삽입되는 응답 엘리먼트를 제한할 수 있다.

- $(.injectMe').load('/someResource div'); // 응답 엘리먼트에서 <div>엘리먼트만 삽입한다.


serialize()

- form 엘리먼크나 폼 안의 form 엘리먼트에서 구성되고 인코딩된 쿼리 문자열을 생성한다.


serializeArray()

- form 컨트롤의 값을 컨트롤의 이름과 값을 포함하는 배열로 수집하여 반환한다.


$.get(url, parameters, callback, type)

- 매개변수로 명시된 URL을 사용하여 서버에 대한 GET 요청을 전송한다.

- type: 응답 본문의 해석방법 명시. html, text, xml, json, script, jsonp

xml을 전달하고 서버에서 XML을 반환할 때 콜백 함수로 전달된 데이터는 XML DOM으로 파싱된다.


$.getJSON(url, parameters, callback)

- 매개변수로 명시된 URL을 사용하여 서버에 대한 GET 요청을 전송한다.


$.post(url, parameters, callback, type)

- 매개변수로 명시된 URL을 사용하여 서버에 대한 POST 요청을 전송한다.


$.ajax(options)

- 요청의 생성 방법과 통보 받은 콜백을 제어하고자 전달된 options을 사용하여 Ajax 요청을 전송한다.

- context: 요청과 관련한 모든 콜백 함수의 컨텍스트로 설정될 엘리먼트 명시

- contentType: 요청에 명시되는 콘텐츠 타입 (application/x-www-form-urlencoded)

(* Ajax로 파일 전송도 가능 -?- )

- success: 응답이 성공 상태 코드를 반환하면 호출되는 함수

- error: 응답이 에러 코드를 반환하면 호출되는 함수

- complete: 요청이 완료되면 호출되는 함수

- beforeSend: 요청이 전송되기에 앞서 먼저 호출되는 함수

- async: false이면 요청이 동기 호출로 전송

- dataFilter: 응답을 필터링하려고 호출되는 콜백 함수


$.ajaxSetup(options)

- 전달된 프로퍼티 집합을 이어지는 $.ajax() 호출의 기본 옵션 값으로 할당한다.


Ajax 이벤트

jQuery에서 Ajax 요청이 실행되는 동안 일련의 커스텀 이벤트 발생하는데, 요청의 진행에 따른 알림을

받거나 다양한 시점에 원하는 처리를 할 목적으로 이벤트 핸들러를 할당할 수 있다.

- 지역 이벤트: beforSend, success, error, complete

- 전역 이벤트: ajaxStart, ajaxSuccess, ajaxError, ajaxStop, ajaxComplete

지역 이벤트는 $.ajax()나 다른 관련 함수에 전달된 콜백함수를 의미한다.

전역 이벤트는 발생하거나 핸들러를 할당하여 처리할 수 있는 커스텀 이벤트이다.


ajaxComplete(callback)

ajaxError(callback)

ajaxSend(callback)

ajaxStart(callback)

ajaxStop(callback)

ajaxSuccess(callback)

- 전달된 콜백 함수를 메소드명이 의미하는 jQuery Ajax 이벤트 핸들러로 할당한다.

예)

$('body').bind(

'ajaxStart ajaxStop ajaxSend ajaxSuccess ajaxError ajaxComplete',

function(event){ alert(event.type)}

);


ajax 확장

- Prefilters: 사용자 정의 옵션을 처리하거나 조재하는 옵션을 변경하는 일반화된 beforeSend 콜백 함수

각 요청이 보내기지 전에 그리고 $.ajax()함수가 옵션을 처리하기 전에 호출되는 콜백 함수

$.ajaxPrefilter() 함수를 사용하여 등록할 수 있다.


$.ajaxPrefilter(dataTypes, handler)

각 요청이 보내지기 전과 $.ajax() 함수가 처리하기 전에 사용자 정의 Ajax 옵션을 처리하거나 

존재하는 옵션을 수정한다.

예)

$.ajaxPrefilter( function(options){

if(options.crossDomain){

options.url = "http://mydomain.net/proxy/" + encodeURIComponent(options.url);

options.crossDomain = false;

}

});



- Converters: 예상한 dataType과는 다른 특정 dataType에 대한 응답을 처리하려고 호출되는 일반화된

dataFilter 콜백함수

예)

$.ajaxSetup({

converts: {

"type mydatatype" : function(textvalue){

if(valid(textvalue)){

return mydatatypevalue;

else{

// 에러 처리

}

}

}

});


- Trandports: $.ajax() 함수가 요청을 보낼 때 내부적으로 사용되는 객체

예)
사용자 정의  dataType인 image일 때를 처리하는 Transport를 생성하여 반환하는 함수

$.ajaxTransport("image", function(s){

if(s.type == "GET" && s.async){

var image;

return {

send: function( _ , callback){

image = new Image();

function done(statue){

if(image){

var statusText = (status == 200) ? "success" : "error",

tmp = image;

image = image.onreadystatechange = image.onerror = image.onload = null;

callback(status, statusText, {image:tmp});

}

}

image.onreadystatechange = image.onload = function(){

done(200);

}

image.error = function(){

done(404);

}

image.src = s.url;

},

abort: function(){

if(image){

image = image.onreadystatechange = image.onerror = image.onload = null;

}

}

},

}

});

'jQuery' 카테고리의 다른 글

jQuery jqXHR 객체  (0) 2014.07.18
jQuery Ajax Sample  (0) 2014.07.17
jQuery API - triggerHandler/ toggle/ proxy/ delegate/  (0) 2014.07.16
jQuery 확장 메소드 만들기  (0) 2014.07.16
jQuery Deprecated API  (0) 2014.07.15
  
 «이전 1  다음»