개조 요청 파라미터 - Ajax 의 2
{name:'jack',age:20} --> name=jack&age=20
{fruit:['apple','banana','orange']} --> fruit=apple&fruit=banana&fruit=orange
배경 에 있 는 servlet 을 요청 합 니 다. 인자 name = jack, age = 20 을 보 내 고 기본적으로 비동기, GET 방식 을 사용 합 니 다.이제 data 는 다음 과 같 습 니 다.
Ajax.request('servlet/ServletJSON',{
data : {name:'jack',age:20},
success : function(xhr){
//to do with xhr
},
failure : function(xhr){
//to do with xhr
}
}
);
전체 코드
/**
* ajax , XMLHttpRequest
* Ajax.request(url,{
* async true( )
* method POST or GET( )
* encode UTF-8( )
* data ( js )
* success xhr
* failure xhr
* });
*
*/
var Ajax =
function(){
function request(url,opt){
function fn(){}
var async = opt.async !== false,
method = opt.method || 'GET',
encode = opt.encode || 'UTF-8',
data = opt.data || null,
success = opt.success || fn,
failure = opt.failure || fn;
method = method.toUpperCase();
if(data && typeof data == 'object'){//
data = _serialize(data);
}
if(method == 'GET' && data){
url += (url.indexOf('?') == -1 ? '?' : '&') + data;
data = null;
}
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.onreadystatechange = function(){
_onStateChange(xhr,success,failure);
};
xhr.open(method,url,async);
if(method == 'POST'){
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=' + encode);
}
xhr.send(data);
return xhr;
}
function _serialize(obj){
var a = [];
for(var k in obj){
var val = obj[k];
if(val.constructor == Array){
for(var i=0,len=val.length;i<len;i++){
a.push(k + '=' + encodeURIComponent(val[i]));
}
}else{
a.push(k + '=' + encodeURIComponent(val));
}
}
return a.join('&');
}
function _onStateChange(xhr,success,failure){
if(xhr.readyState == 4){
var s = xhr.status;
if(s>= 200 && s < 300){
success(xhr);
}else{
failure(xhr);
}
}else{}
}
return {request:request};
}();
데 이 터 를 대상 유형 으로 만 들 뿐 별 쓸모 가 없 는 것 같다.하지만 폼 (form) 과 결합 하면 유용 하 다.form 을 사용 하지만 ajax 방식 으로 제출 하려 면 form 의 요 소 를 HTTP 요청 의 매개 변수 형식 으로 정렬 하 는 것 은 힘 든 일이 다.여기에 도구 함수 formToHash 를 써 서 form 요소 버튼 값 형식 을 대상 으로 되 돌려 줍 니 다.
/**
* hash
* @param {HTMLElement} form
* @return {hash}
* @example
* formToHash(document.forms[0]);
*/
function formToHash(form){
var hash = {}, el;
for(var i = 0,len = form.elements.length;i < len;i++){
el = form.elements[i];
if(el.name == "" || el.disabled) continue;
switch(el.tagName.toLowerCase()){
case "fieldset":
break;
case "input":
switch(el.type.toLowerCase()){
case "radio":
if(el.checked)
hash[el.name] = el.value;
break;
case "checkbox":
if(el.checked){
if(!hash[el.name]){
hash[el.name] = [el.value];
}else{
hash[el.name].push(el.value);
}
}
break;
case "button":
break;
case "image":
break;
default:
hash[el.name] = el.value;
break;
}
break;
case "select":
if(el.multiple){
for(var j = 0, lens = el.options.length;j < lens; j++){
if(el.options[j].selected){
if(!hash[el.name]){
hash[el.name] = [el.options[j].value];
}else{
hash[el.name].push(el.options[j].value);
}
}
}
}else{
hash[el.name] = el.value;
}
break;
default:
hash[el.name] = el.value;
break;
}
}
form = el = null;
return hash;
}
자, formToHash 가 있 으 면 되 돌아 오 는 대상 을 Ajax 의 매개 변수 data 로 할 수 있 습 니 다. Ajax 내부 의serialize 는 이 대상 을 HTTP 요청 매개 변수 형식 으로 자동 으로 변환 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ios background location updateAbout positioning There are three official recommendations The significant-change location service (Recommended) Foregro...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.