>  기사  >  웹 프론트엔드  >  ajax와 jsonp의 사용법에 대한 자세한 설명

ajax와 jsonp의 사용법에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-04-17 14:43:301721검색

이번에는 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>
참고: data는 백그라운드에서 반환된 데이터를 나타냅니다. ajax의 사용은 서버 환경에 따라 다릅니다.

2.$.get():

• $.get() 메소드는 GET 요청을 사용하여 서버에서 데이터를 로드하며 새로 고치지 않고 데이터를 요청하는 ajax 메소드이기도 합니다.

•매개변수:

•url: 동일 출처 정책을 따라야 하는 방문 URL
•data: 서버로 전송되는 데이터.
•function(data,status){}: 함수가 성공적으로 실행되도록 요청합니다
•dataType: 응답의
데이터 유형을 요청합니다. rreee

• $.get() 메소드의 매개변수는 $.ajax()의 매개변수와 다릅니다. URL은 필수 매개변수이고 나머지 3개는 선택사항입니다.

•데이터는 반환된 데이터이고, 상태는 일반적으로 ""성공", "오류", "시간 초과" 등을 포함하여 요청 상태를 나타냅니다.
•데이터 유형이 jsonp인 경우 도메인 전체에 걸쳐 데이터를 요청할 수도 있습니다.
•None 요청 실패 시 콜백 기능

3.$.포스트()

•$.get() 메소드는 POST 요청을 사용하여 서버에서 데이터를 로드합니다.

•사용되는 메소드는 $.get() 메소드와 완전히 동일합니다.

4.$.load():

•서버에서 데이터를 로드합니다. 데이터 유형을 지정할 필요가 없으며 반환된 데이터는 자동으로 요소에 배치됩니다.

•매개변수:

•URL: 주소;

•data: 요청 매개변수, 선택 사항
•function(response, status, xhr): 성공적인 요청을 위한 콜백 함수.
rreee

• 반환된 데이터는 p에 배치됩니다.

•데이터는 도메인 간에 액세스할 수 없습니다.
•응답은 반환된 데이터이고 상태는 요청 상태입니다.
•요청 실패에 대한 콜백 기능이 없습니다.

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>
• json 데이터를 직접 얻는 방법입니다.

•실패를 반환하는 콜백 함수가 없습니다.

• 콜백 함수는

익명 함수;

가 아닌 명명된 함수입니다.

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>
•반환 결과 데이터는 js 코드입니다.

•이 방법은 js 코드를 동적으로 로드하는 데 사용할 수 있습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.