zoukankan      html  css  js  c++  java
  • ajax和jsonp

    1.原生ajax请求服务端txt文件 

     1 <!DOCTYPE html>
     2 <html lang="en">
     3     <head>
     4         <meta charset="utf-8">
     5         <!-- <script src="myajax.js"></script> -->
     6         <script>
     7         window.onload= function(){
     8             var oBtn = document.getElementById("btn");
     9             oBtn.onclick = function(){
    10                 //创建ajax对象
    11                 var xhr = null;
    12                 if(window.XMLHttpRequest)
    13                 {
    14                     xhr = new XMLHttpRequest();// w3c标准
    15                 }
    16                 else
    17                 {
    18                     xhr = new ActiveXObject("Microsoft.XMLHTTP");// IE
    19                 }
    20                 // 连接服务器
    21                 xhr.open('Get','ha.txt',true);
    22                 // 发送请求
    23                 xhr.send();
    24                 // 接收返回
    25                 xhr.onreadystatechange = function(){ //onreadyStateChange事件是在readyState属性值发生改变时触发的
    26                     if(xhr.readyState == 4){ // readyState的值表示了当前请求的状态
    27                         if(xhr.status == 200){// Status存储了服务器端返回的Http请求响应代码
    28                             alert(xhr.responseText);
    29                         }
    30                         else{
    31                             alert('failed');
    32                         }
    33                     }
    34                 }
    35             }
    36         }
    37         </script>
    38     </head>
    39     <body>
    40     <input id="btn" type="button" value="read" />
    41     </body>
    42 </html>
    View Code
    属性描述
    onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
    readyState

    存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

    • 0: 请求未初始化
    • 1: 服务器连接已建立
    • 2: 请求已接收
    • 3: 请求处理中
    • 4: 请求已完成,且响应已就绪
    status

    200: "OK"

    404: 未找到页面

    2.jsonp

    • 什么是JSONP?

    要了解JSONP,不得不提一下JSON,那么什么是JSON ?

    JSON is a subset of the object literal notation of JavaScript. Since JSON is a subset of JavaScript, it can be used in the language with no muss or fuss.

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

    • JSONP有什么用?

    由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。

    • 如何使用JSONP?

    在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数。

    • JSONP的简单实例

      html代码

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <script>
                function jsonpCallback(data) {
                    for(var i in data) {
                        alert(i+":"+data[i]);//循环输出
                    }
                }
            var JSONP=document.createElement("script");
            JSONP.src="service.php?callback=jsonpCallback";
            document.getElementsByTagName("head")[0].appendChild(JSONP);
            </script>
        </head>
        <body>
        </body>
    </html>
    View Code

      php代码

    <?php
    
        header('Content-Type:application/json;charset=utf-8');
        //服务端返回JSON数据
        $arr=array('a'=>1,'b'=>2,'c'=>3);
        $result=json_encode($arr);
        //动态执行回调函数
        $callback=$_GET['callback'];
        echo $callback."($result)";
    
    ?>
    View Code
    • JSONP的原理

    首先在客户端注册一个callback, 然后把callback的名字传给服务器。
    此时,服务器先生成 json 数据。
    然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
    最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
    客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

    参考文档:http://justcoding.iteye.com/blog/1366102

  • 相关阅读:
    51nod 1102 面积最大的矩形 (单调栈)
    Loj 6280 数列分块入门 4
    Loj 6279 数列分块入门 3
    python 自己写package 导入 attempted relative import beyond top-level package
    Python __pycache__ 含义
    Hive 中 null 和N 的处理
    【shell】 shell 敏捷开发
    RPC 讲解
    neo4j 应用
    【Linux】 查看CPU占用
  • 原文地址:https://www.cnblogs.com/ch-n/p/6822228.html
Copyright © 2011-2022 走看看