최근 프로젝트에서는 파일 업로드로 반환된 json 데이터를 다운로드하라는 메시지가 표시됩니다. IE10에서만 발생합니다. 프런트 엔드는 jQuery 플러그인 ajaxForm을 사용하여 양식을 제출하고 백그라운드에서 반환되는 데이터 형식은 json입니다. 코드는 다음과 같습니다.
def jsonp(func):
"""JSONP 요청에 대한 JSON화된 출력을 래핑합니다."""
@wraps(func)
def Decorated_function(*args, **kwargs):
콜백 = request.args.get('callback', False)
temp_content = func(*args, **kwargs)
if isinstance(temp_content, dict):
temp_content.setdefault('success', True)
temp_content.setdefault('code', 200)
시도해 보세요:
temp_content = json.dumps(temp_content, indent=4)
UnicodeDecodeError 제외:
시도해 보세요:
temp_content = ujson.dumps(temp_content)
e:
와 같은 StandardError 제외
로거.예외(e)
temp_content = json.dumps({'success': False, 'code': 500, 'info': 'INVALID_CONTENT'})
temp_content = cgi.escape(temp_content)
콜백인 경우:
#
http://evilcos.me/?p=425에 따라 jsonp는 /**/머리가 더 안전해질 거예요
내용 = '/**/' str(callback) '(' temp_content ')'
를 추가합니다.
mimetype = 'application/javascript'
헤더 = {'charset':'utf-8'}
return current_app.response_class(content, mimetype=mimetype, headers=headers)
그 외:
mimetype = 'application/json'
헤더 = {'charset':'utf-8'}
내용 = 임시_내용
return current_app.response_class(content, mimetype=mimetype, headers=headers)
elif isinstance(temp_content, basestring):
temp_content = cgi.escape(temp_content)
temp_content 반환
그 외:
temp_content 반환
decorated_function 반환
@mod.route('/patch/install.json',method=['POST'])
@jsonp
def patch_install():
{'데이터': '데이터'}를 반환합니다
참고: 이 예시의 백엔드는 Python을 사용합니다. 프로젝트에서 동일한 문제가 발생하면 해당 언어로 변경하세요
실제로 이 문제를 해결하려면 "백엔드에서 반환되는 데이터 형식을 text/html 형식으로 변경하세요"라는 한 문장으로 간단히 정리하면 됩니다.