찾다
웹 프론트엔드JS 튜토리얼JS 크로스 도메인 POST 구현 단계에 대한 자세한 설명

이번에는 JS 크로스 도메인 POST 구현 단계에 대해 자세히 설명하겠습니다. JS 크로스 도메인 POST 구현 시 주의사항은 무엇인가요?

javascript Cross-domain은 매우 흔한 문제이며 그 중 jsonp가 가장 많이 사용되는 방법이지만 jsonp는 post가 아닌 get만 지원하므로 일부 데이터를 jsonp를 통해 게시하려는 경우 큰 문제가 발생합니다. .

여기에서는 Post가 iframe에서 양식을 생성하여 구현되고 postMessage를 통해 호출자에게 값을 반환합니다.

첫 번째 단계에서는 먼저 jsonp를 허용하는 백엔드 코드를 구현합니다. 구현에 사용할 언어는 사용자가 직접 결정합니다.

C# 코드는 다음과 같습니다.

protected void Page_Load(object sender, EventArgs e)
    {
      StringBuilder sbRet = new StringBuilder();
      sbRet.Append("<script>");
      sbRet.Append(Request["jsoncallback"]);
      sbRet.Append("({");
      foreach (string k in Request.Form) {
        if (k == "jsoncallback") continue;
        sbRet.Append("&#39;"+k+"&#39;:&#39;"+Request.Form[k]+"&#39;");
      }
      
      sbRet.Append("});");
      sbRet.Append("</script>");
      Response.Write(sbRet.ToString());
      Response.End();
    }

예를 들어 http://localhost/test?jsoncallback=callme

에 전화할 때 나에게 반환하려는 내용은 { userName:'user1', 비밀번호:'pass1' } 입니다.

실제로 <script>callme({ userName:'user1', 비밀번호:'pass1' })</script>를 반환할 수 있습니다.

두 번째 단계, d:test.html


           

와 같은 로컬 폴더에 게시 테스트 페이지를 구축합니다. 3단계, 찾아보고 제출을 클릭하여 반환된 항목이 <script>callme({ userName:' user1'인지 확인합니다. , 비밀번호:'pass1' })</script>는 백엔드 프로그램에 문제가 없음을 의미합니다.

네 번째 단계에서는 위의 html을 구현하기 위한 일반 코드를 작성합니다.

nbsp;html>

  
   <meta>
    <title>测试一哈</title>
    
     
  <script>
  //源码 开始
   function postJSONP(url, data, callback) {
    var template = &#39;<form action="{{url}}" method="post" id="form1">&#39;;   
    for (var k in data) {
     template = template
       + &#39;  <input type="text" name="&#39;+k+&#39;" value="&#39;+data[k]+&#39;" />&#39;
    }
      template = template 
      + &#39;  <input type="text" name="jsoncallback" value="function callback(data) { parent.postMessage(data, \&#39;*\&#39;); } callback" />&#39;
      + &#39;&#39;
      + &#39;<&#39;+&#39;script>&#39;
      + &#39;document.getElementById("form1").submit();&#39;
      + &#39;</&#39;+&#39;script>&#39;;      
   template = template.replace("{{url}}", url);      
   var p = document.createElement("p");
   p.style.display = &#39;none&#39;;  
   p.innerHTML = &#39;<iframe src="">&#39;;
   document.body.appendChild(p);   
   var ifrm = p.children[0];
   var cwin = ifrm.contentWindow;
   cwin.document.write(template);   
   window.onmessage = function(e) {
   if (callback) callback(e.data);
   }
   }
   //源码 结束  
  //使用测试
   window.onload = function() {
   postJSONP(&#39;http://localhost:59898/WebForm1.aspx&#39;, { userName: &#39;张静&#39;, password: &#39;就不告诉你&#39; }, function(data) {
    console.log(11, data);
   });
   postJSONP(&#39;http://localhost:59898/WebForm1.aspx&#39;, { 仓库: &#39;1号大仓&#39;, 面积: &#39;2万平米&#39; }, function(data) {
    console.log(22, data);
   });
  }
 </script>
  

다섯 번째 단계, 보안 문제,

window.onmessage = function(e) {
  //可通过 e 来判断来源,并做一些安全方面的处理,此处读者自己去研究吧,可以加个 console.log(e) 看看 e 有哪些内容。
  if (callback) callback(e.data);
}

이 기사의 사례를 읽은 후 방법을 마스터했다고 믿습니다. PHP 중국어 웹사이트의 기타 관련 기사를 주목해주세요!

추천 도서:

react-navigation 사용법 요약(코드 포함)

JS DOM 요소의 일반적인 추가, 삭제, 수정 및 확인 작업에 대한 자세한 설명

위 내용은 JS 크로스 도메인 POST 구현 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

mPDF

mPDF

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

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

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

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.