이 글에서는 프론트엔드 크로스 도메인 요청 처리와 백엔드 크로스 도메인 데이터 처리 방법을 소개하고, Ajax의 크로스 도메인 문제를 자세히 분석합니다.
최근 공용 계정의 프론트엔드 개발 작업을 하다가 지역 내 성-시-군 3단계 연결, 3단계 연결 등 Ajax 크로스 도메인 요청 문제에 직면했습니다. 자동차 브랜드-자동차 시리즈-자동차 모델 등의 연결 쿼리를 모두 외부에서 호출해야 합니다. 인터페이스(다른 엔지니어링 프로젝트에 대한 인터페이스)가 완성되었습니다. 이제 크로스 도메인 요청에 대한 개인적인 솔루션을 공유하겠습니다. 물론 백그라운드 프로그래머의 도움으로 그 출처를 빠르게 파악하고 천천히 축적해 놓았으니 모든 분들께 도움이 되었으면 좋겠습니다. 또한 적극적으로 의견이나 제안을 제공해 주시기 바랍니다.
교차 도메인 요청은 백그라운드 코드를 사용하여 콜백 함수를 수신하고 프런트엔드에서 json 데이터를 추가로 처리한 다음 ajax 요청을 사용하여 콜백 매개변수를 서버에 보내고 데이터 형식을 jsonp로 지정해야 합니다.
1. 백그라운드는 도메인 간 요청을 처리합니다.
1.CarBrandController.java(자동차 브랜드 인터페이스 Java 파일), 여기에 나열된 방법은 주로 다양한 레벨 값을 기반으로 해당 브랜드, 자동차 시리즈 및 자동차 모델을 쿼리하는 데 사용됩니다. 여기서는 교차 도메인 요청에 대해 콜백 함수가 처리됩니다. 반환된 콜백이 null이면 특별한 처리가 필요하지 않습니다. 반환된 콜백이 아닌 경우에는 직접 인쇄하면 됩니다. null이면 도메인 간 요청을 나타냅니다. 이때 json 데이터에 대한 특수 처리가 필요합니다. 즉, json 데이터의 외부 레이어에 괄호 쌍이 추가됩니다. 자세한 내용은 printlnJSONObject 메서드를 참조하세요. HttpAdapter.java 파일.
public void json(HttpServletRequest request,HttpServletResponse response){ Map<String,Object>map=new HashMap<String, Object>(); String id = request.getParameter("id"); //接收ajax请求带过来的id String level = request.getParameter("level"); //接收ajax请求带过来的level String callback=request.getParameter("callback"); //接收ajax请求带过来的callback参数 if ("1".equals(level)) { //如果level是'1',则查询第一级目录内容 map.put("results", this.carBrandService.findByAttr(null, "first_letter asc")); //调用查询方法,结果放入map } else if ("2".equals(level)) { //如果level是'2',则查询第二级目录内容 map.put("results", this.carSerieService.findByAttr("parent_id="+id, "first_letter asc"));//调用查询方法,结果放入map } else if ("3".equals(level)) { //如果level是'3',则查询第三极目录内容 map.put("results", this.carModelYearService.findByAttr("parent_id="+id, "jian_pin desc"));//调用查询方法,结果放入map } map.put("level",level); if (null==callback) { //如果接收的callback值为null,则是不跨域的请求,输出json对象 HttpAdapter.printlnObject(response, map); }else{ //如果接收的callback值不为null,则是跨域请求,输出跨域的json对象 HttpAdapter.printlnJSONPObject(response, map, callback); } }
2.HttpAdapter.java(출력 개체의 Java 파일), printlnObject 메서드는 일반 json 문자열을 인쇄합니다. printlnJSONObject 메서드는 json 문자열에 대해 특수 처리를 수행합니다.
/** * 打印对象 * @param response * @param object */ public static void printlnObject(HttpServletResponse response,Object object){ PrintWriter writer=getWriter(response); writer.println(JSON.toJSONString(object)); } /** * 打印跨域对象 * @param response * @param object */ public static void printlnJSONPObject(HttpServletResponse response,Object object,String callback){ PrintWriter writer=getWriter(response); writer.println(callback+"("+JSON.toJSONString(object)+")"); }
2. 프런트엔드 ajax 도메인 간 요청 데이터
작성 방법 1: 매개변수 콜백=을 서버로 보내시겠습니까? , dataType을 'jsonp' 형식으로 지정합니다. 도메인 간 요청 중에 지정된 데이터 형식은 jsonp 형식이어야 합니다.
function loadData(obj,level,id,value){ $.ajax({ url:'http://192.168.1.106:8086/carBrand/json.html?level='+level+'&id='+id+'&callback=?', //将callback写在请求url后面作为参数携带 type:'GET', async:false, dataType:'jsonp', success:function(data){ console.log(data); //其他处理(动态添加数据元素) }); }
작성방법 2: 콜백은 URL에 작성할 필요는 없으나, jsonp 매개변수를 'callback'으로 지정하고 jsonpCallback 매개변수에 값을 주어야 합니다.
function loadData(obj,level,id,value){ $.ajax({ url:'http://192.168.1.106:8086/carBrand/json.html?level='+level+'&id='+id, type:'GET', dataType:'jsonp', jsonp: 'callback', //将callback写在jsonp里作为参数连同请求一起发送 jsonpCallback:'jsonpCallback1', success:function(data){ console.log(data); }); }
위의 두 가지 표기법은 같은 의미이지만 표기법이 다릅니다.
다음으로 jsonp의 작동 원리를 추가해 보겠습니다.
3. jsonp의 도메인 간 원칙 분석
jsonp의 가장 기본 원칙은 <script> 태그를 동적으로 추가하고 스크립트 태그의 src 속성에는 도메인 간 제한이 없습니다. 이러한 방식으로 이 크로스 도메인 방법은 ajax XmlHttpRequest 프로토콜과 아무 관련이 없습니다. </script>
JSONP는 스크립트 태그를 서버 측에 통합하여 클라이언트에 반환하고 JSONP에 대한 도메인 간 액세스를 허용하는 비공식 프로토콜입니다. 이는 패딩이 포함된 JSON인 자바스크립트 콜백을 통해 달성됩니다. 동일 출처 정책의 제한으로 인해 XmlHttpRequest는 현재 소스(도메인 이름, 프로토콜, 포트)에서만 리소스를 요청할 수 있습니다. 도메인 간 요청을 하려면 html의 스크립트 태그를 사용하여 도메인 간 요청을 하고 응답에서 실행할 스크립트 코드를 반환하면 JSON을 사용하여 javascript 개체를 직접 전달할 수 있습니다. 이 도메인 간 통신 방법을 JSONP라고 합니다.
jsonCallback 함수 jsonp1236827957501(....): 브라우저 클라이언트에 의해 등록됩니다. 크로스 도메인 서버에서 json 데이터를 얻은 후 콜백 함수
Jsonp 원칙:
먼저 콜백을 등록합니다. 클라이언트(예: 'jsoncallback')를 호출한 다음 콜백 이름(예: jsonp1236827957501)을 서버에 전달합니다. 참고: 서버가 콜백 값을 얻은 후 jsonp1236827957501(...)을 사용하여 출력할 json 콘텐츠를 포함해야 합니다. 이때 서버에서 생성된 json 데이터를 클라이언트가 올바르게 수신할 수 있습니다.
그런 다음 javascript 구문을 사용하여 함수를 생성합니다. 함수 이름은 전달된 매개 변수 'jsoncallback' jsonp1236827957501의 값입니다.
마지막으로 json 데이터가 함수에 매개 변수로 직접 배치되어 단락 js 구문 문서가 생성됩니다. , 클라이언트에게 반환되었습니다.
클라이언트 브라우저는 스크립트 태그를 구문 분석하고 반환된 자바스크립트 문서를 실행합니다. 이때 자바스크립트 문서 데이터는 클라이언트의 사전 정의된 콜백 함수(예: 위 예의 jquery $.ajax() 메서드에 매개변수로 전달됩니다. ) 캡슐화된 성공: 함수(json)).(동적 실행 콜백 함수)
NodeJS를 사용하여 WebSocket 기능을 구현하는 방법
위 내용은 Ajax 프런트엔드 및 백엔드 교차 도메인 요청을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
