이번에는 ajax와 jsonp 사용에 대한 자세한 설명을 가져오겠습니다. ajax와 jsonp 사용 시 주의사항은 무엇인가요?
서문: ajax 및 jsonp는 백그라운드와 통신하여 데이터와 정보를 얻을 수 있지만 페이지를 부분적으로 새로 고치기 위해 전체 페이지를 새로 고칠 필요는 없습니다.
1. 아약스
•정의: 백그라운드와 비동기적으로 통신하기 위해 http 요청을 보내는 기술입니다.
•원리: xmlhttp 개체를 인스턴스화하고 이 개체를 사용하여 배경과 통신합니다.
Ajax에 대한 동일 출처 전략:
•Ajax에서 요청한 페이지나 리소스는 동일한 도메인 내의 리소스일 수 있으며, 다른 도메인의 리소스일 수는 없습니다. 이는 Ajax 설계 시 보안 고려 사항을 기반으로 합니다.
------------------------------------- ---------------------
ajax 방법:
1. $.ajax({}):
•공통 매개변수: •url: 네트워크 주소 요청
•type: 요청 방법, 기본값은 'GET', 일반적으로 사용되는 'POST'
•dataType: 반환된 데이터 형식 설정, 일반적으로 json을 사용하지만 html 및 jsonp도 사용합니다.
• data: 서버로 보낼 데이터를 설정
•.done(): 요청 성공 후 콜백 함수를 설정•.fail(): 요청 실패 후 콜백 함수를 설정
•async: 요청 여부를 설정 비동기, 기본값은 'true'이며 비동기
$(function () { $("input").click(function () { $.ajax({ url: "./data.json", type: "get", dataType: "json", }); .done(function(data) {//请求成功的回调函数 $("input").val(dat.name); }) .fail(function() { alert('服务器超时,请重试!'); }); }); }) ...... <body> <p> <input type="button" value="xinzhi"> </p> </body>
2.$.get():
• $.get() 메소드는 GET 요청을 사용하여 서버에서 데이터를 로드하며 새로 고치지 않고 데이터를 요청하는 ajax 메소드이기도 합니다. •매개변수:•url: 동일 출처 정책을 따라야 하는 방문 URL
•data: 서버로 전송되는 데이터.
•function(data,status){}: 함수가 성공적으로 실행되도록 요청합니다
•dataType: 응답의
데이터 유형을 요청합니다. rreee
•데이터는 반환된 데이터이고, 상태는 일반적으로 ""성공", "오류", "시간 초과" 등을 포함하여 요청 상태를 나타냅니다.
•데이터 유형이 jsonp인 경우 도메인 전체에 걸쳐 데이터를 요청할 수도 있습니다.
•None 요청 실패 시 콜백 기능
3.$.포스트()
•$.get() 메소드는 POST 요청을 사용하여 서버에서 데이터를 로드합니다.•사용되는 메소드는 $.get() 메소드와 완전히 동일합니다.
4.$.load():
•서버에서 데이터를 로드합니다. 데이터 유형을 지정할 필요가 없으며 반환된 데이터는 자동으로 요소에 배치됩니다.•매개변수:
•data: 요청 매개변수, 선택 사항
•function(response, status, xhr): 성공적인 요청을 위한 콜백 함수.
rreee
•데이터는 도메인 간에 액세스할 수 없습니다.
•응답은 반환된 데이터이고 상태는 요청 상태입니다.
•요청 실패에 대한 콜백 기능이 없습니다.
4. getJSON()
•방법은 AJAX HTTP GET 요청을 사용하여 JSON 데이터를 가져옵니다.•매개변수:
•url: 요청 URL, 필수 매개변수
•data: 서버로 전송된 데이터
•function(data, status, xhr): 성공적인 요청에 대한 콜백 함수
//参考代码: $(function () { $("input").click(function () { $.get( "./data.json", function (data,status) { console.log(data.name); }, "json" ); }); }) ...... <body> <p> <input type="button" value="xinzhi"> </p> </body>
익명 함수;
가 아닌 명명된 함수입니다.5. getScript()
•방법은 AJAX HTTP GET 요청을 사용하여 js 코드를 얻고 실행합니다. •매개변수: •url: 요청 URL, 필수 매개변수 •function(data,status): 성공적인 요청을 위한 콜백 함수$(function () { $("input").click(function () { $(".box").load( "./data.json", function (response,status) { console.log(data.name); } ); }); }) ...... <body> <p> <input type="button" value="xinzhi"> <p class="box"></p> </p> </body>
2, jsonp
•定义:一种可以实现跨域发送http请求的数据通信格式,可以嵌在ajax中使用。
•原理:利用script标签可以跨域链接资源的特性。
用法一:函数传参
<script type="text/javascript"> function aa(data){ console.log(data.name); } </script> <script type="text/javascript" src="....../data.js"></script>
说明:在外部定义一个data.js文件,这个文件的路径可以与当前页面不在同一个域下面。
data.js的内容:
aa({ "data":{ "name":"xiaohong", "age":"18" } })
•将数据以页面定义的函数的参数的形式传递进去,从而获取数据。
•本质上可以将数据拆分,使得数据不用强制保存在同一个域名下。
用法二:利用ajax
$.ajax({ url:'...../data.js',//可以不是本地域名 type:'get', dataType:'jsonp', //jsonp格式访问 jsonpCallback:'aa' //获取数据的函数 }) .done(function(data){ console.log(data.name); }) .fail(function() { alert('服务器超时,请重试!'); });
•data.js的内容和上面一样。
•使用ajax的方法本质上也是script标签可以跨域链接资源,不过jquery为其封装了相同的方法,看起来一样。
•以上代码的执行过程为:ajax通过jsonp技术跨域访问data.js文件,通过找到aa()方法将其参数传递给.done方法的data参数执行.done方法。
•目前这种方式仍然有其局限性,就是必须知道data.js文件的名字和定义的方法aa,如果在仅仅知道域名的情况下,需要另外的方法.
用法三
var $input = $("input"); $input.keyup(function () { $.ajax({ url:'https://sug.so.360.cn/suggest?',//请求360搜索的联想数据 type:'get', dataType:'jsonp', //jsonp格式访问 data: {word: $input.val()}, }) .done(function(data){ console.log(data); }) .fail(function() { alert('服务器超时,请重试!'); }); }) .... <body> <input type="text"> </body>
•通过浏览器查看每次输入关键字服务器发送回的数据包,找到js文件中header的地址以及相关的提交数据,发现key为word关键字,因此可以向服务器发送data数据。
•服务器返回的数据会自动传给回调的匿名函数的参数data.
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 ajax와 jsonp의 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!