여러 개의 이름이 같은 필드를 포함하는 요청은 jQuery입니다.aax로 못 던지는 말과 촌스러운 해결 방법.
14191 단어 jQueryJavaScript
원본 코드
원래 움직이는 소스는 이렇게 만들어서 던져달라고 했어요.
jsCode에 컴파일된 객체의 Javascript 문자열이 이미 포함되어 있다고 가정합니다.
params = urllib.urlencode([
('js_code',jsCode),
('compilation_level', 'SIMPLE_OPTIMIZATIONS'),
('output_format', 'json'),
('output_info', 'compiled_code'),
('output_info', 'warnings'),
('output_info', 'errors'),
])
headers = { "Content-type": "application/x-www-form-urlencoded" }
conn = httplib.HTTPConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
여기에는 "output_info"매개 변수 3개가 있습니다. 요청에서 이러한 느낌입니다.대상 코드 - 오류 예제(JavaScript)
JS에 다시 쓴 거.브라우저에서 실행되기 때문에 jQuery를 사용합니다.
(node.js의 http로 쓰고 싶어도 얼마 안 남았어요.)
var params = {
"js_code" : jsCode,
"compilation_level": "SIMPLE_OPTIMIZATIONS",
"output_format": "json",
"output_info": ["compiled_code", "warnings", "errors"]
};
$.ajax({
url : "http://closure-compiler.appspot.com/compile",
type : "POST",
contentType : "application/x-www-form-urlencoded",
data : params,
dataType : "json"
}).done(function(res){...}).fail(function(e){...});
이런 느낌이에요, output_info 배열.select 같은 흔한 패턴이지만 Closure Compler 씨가 민감하기 때문에 잘못된 것입니다.구체적으로 "ServerError"는 "output_info[]"와 같은 매개변수를 모른다고 반환됩니다. 다시 시작합니다.
대상 코드 마이그레이션 - 흙 냄새 제거 예제(JavaScript)
공식 문서를 많이 봤지만 관건적인 해결 방법을 찾지 못해 기본으로 돌아가 스스로 서열화했다.
var params = [
{ key : "js_code", val : jsCode },
{ key : "compilation_level", val : "SIMPLE_OPTIMIZATIONS" },
{ key : "output_format", val : "json" },
{ key : "output_info", val : "compiled_code" },
{ key : "output_info", val : "warnings" },
{ key : "output_info", val : "errors" }
];
paramStr = $.map(params, function(n){
return encodeURIComponent(n.key) + "=" + encodeURIComponent( n.val )
}).join("&").replace(/%20/g, "+");
$.ajax({
url : "http://closure-compiler.appspot.com/compile",
type : "POST",
contentType : "application/x-www-form-urlencoded",
data : paramStr,
processData : false,
dataType : "json"
}).done(function(res){...}).fail(function(e){...});
진흙 냄새가 나지만 이게 움직인다.아무튼 반갑습니다.
하지만 시원치 않아요.
(2/20 추적) 정답
smzk씨에게서 정보를 받았습니다.1.4부터 추가된traditional 옵션을 사용하면 서열화할 때의 깊이 성형 처리가 아니라 낡은 형식으로 제공된다.
var params = [
{ key : "js_code", val : jsCode },
{ key : "compilation_level", val : "SIMPLE_OPTIMIZATIONS" },
{ key : "output_format", val : "json" },
{ key : "output_info", val : "compiled_code" },
{ key : "output_info", val : "warnings" },
{ key : "output_info", val : "errors" }
];
paramStr = $.param(params, true);//traditionalオプション付きでシリアライズ
길기 때문에 그에 상응하는 곳만 있다.아니오, 시원해요.
Reference
이 문제에 관하여(여러 개의 이름이 같은 필드를 포함하는 요청은 jQuery입니다.aax로 못 던지는 말과 촌스러운 해결 방법.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/uzuki_aoba/items/e7f56b2a9d602431633b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)