动态创建 script 实现跨域请求数据

动态创建script标签 (由事件触发)

在我们需要请求数据的时候我们就可以动态的创建 script 标签 src设置为我们需要请求数据的地址 另外我们可以附加参数 ?后面附加参数 例如 :?参数=1&callbacl=cb    我们还可以指定回调函数 回调函数就是我们在得到数据之后需要做什么处理

给这个函数传一个参数 即我们想要的数据

  

btn.onclick=function(){
       var value = numbers.value;     // 必须在点击事件之后获取  这样或取得才是当前的 值
                    var script = document.createElement("script");  // 穿件一个script 标签
                    script.src = "http://10.80.1.23/PHP/ajax/logistics/logistics.php?kuaidi_id="+value+"&callback=show";  // 把script的src设置为我们请求数据的地址并传递参数 和回调函数
                    document.body.appendChild(script); // 把script 插入到body里面
               }

  

  这里提到一点问题 就是我们的scrript  标签是动态的插入到body的末尾的 如果你的script事写在body下面的 而这时 刚好 你是在 callback函数外面获取的页面元素 在callback里面进行操作就会完全无效

  解决办法 就是 把你的 script也写在body里面 或者 在callback里面获取元素并进行操作。

  

php文件是怎么样的呢 大概就是这样的

<?php
    $kuaidi = array();
    $kuaidi["1000"] = array(
        "info" => ‘王小三的快递‘,
        ‘status‘ => ‘配送中‘,
    );
    $kuaidi["1001"] = array(
        "info" => ‘王三的快递‘,
        ‘status‘ => ‘配送中‘,
    );
    $kuaidi["1002"] = array(
        "info" => ‘张三的快递‘,
        ‘status‘ => ‘已配送‘,
    );
    /*    * 传送方式 GET
         * 参数 kuaidi_id 需要查询的快递单号
         * callback 回调函数名
     * */
    if(!empty($_GET["kuaidi_id"])){
        //如果没有传回调函数
        if(empty($_GET["callback"])){
            echo json_encode($kuaidi[$_GET["kuaidi_id"]]);
        }else{
            //如果有回调函数 那么输出 jsonp
            echo $_GET["callback"]."(".json_encode($kuaidi[$_GET["kuaidi_id"]]).")";
        }
    }
?>

  

  完整的html代码

  

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <input type="text" name="number" id="number" value="" />
        <p id="info"></p>
        <input type="button" name="" id="btn" value="查询" />

        <script type="text/javascript">
                var btn = document.getElementById("btn");
                var numbers = document.getElementById("number");
                var info = document.getElementById("info");
                btn.onclick=function(){
                    var value = numbers.value;
                    var script = document.createElement("script");
                    script.src = "http://10.80.1.23/PHP/ajax/logistics/logistics.php?kuaidi_id="+value+"&callback=show";
                    document.body.appendChild(script);
                }
                function show(val){ // 插入数据
                    info.innerText ="姓名:" + val.info + " 状态:" + val.status;
                }
        </script>
    </body>

</html>
时间: 2024-08-12 19:06:41

动态创建 script 实现跨域请求数据的相关文章

跨域请求数据解决方案整理

转自:http://www.cnblogs.com/xyang/archive/2012/05/18/2507845.html 跨域请求数据解决方案主要有如下解决方法: JSONP方式 表单POST方式 服务器代理 Html5的XDomainRequest Flash request 分开说明: 一.JSONP: 直观的理解: 就是在客户端动态注册一个函数 function a(data),然后将函数名传到服务器,服务器返回一个a({/*json*/})到客户端运行,这样就调用客户端的 func

使用jquery实现跨域请求数据

首先处理服务器代码,使返回的数据符合特定的格式,为了方便这里使用了php test.php代码如下 1 <?php 2 $con = mysql_connect("localhost","root","root"); 3 mysql_select_db("test", $con); 4 5 $result = mysql_query("select username,password from user&quo

js跨域请求数据的3种常用的方法

由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript   在原生js(没有jQuery和ajax支持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页面的body标签下面加入以下代码): <script

谈谈跨域请求数据的几种常用的方法

由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求. 那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理: 1.JavaScript 在原生js(没有jQuery和ajax支持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端口下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页面的body标签下面加入以下代码): <script

web三种跨域请求数据方法

web三种跨域请求数据方法 以下测试代码使用php,浏览器测试使用IE9,chrome,firefox,safari <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.

使用JSONP跨域请求数据

下面代码,可以使用JSONP进行跨域请求数据,Insus.NET记录以下,以备忘记. 使用JSONP跨域请求数据

AJAX跨域请求数据

由于浏览器的同源策略 ajax请求不可以接收到请求响应回来的数据 请求数据需要调用浏览器的内置构造函数 XMLHttpRequest() 进行 实例对象 var xhr = new XMLHttpRequest(); 注意点 在IE8之前支持的 ActiveXobject("Microsoft.XMLHTTP");  记住要进行兼容处理哦  在这里我就不写了 通过该对象进行获取 获取数据的四种状态  xhr.readyState 该属性保存着请求数据的几种状态 1.xhr.open(请

jsonp跨域请求数据实例之手机号码查询

网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php,java等,仅仅通过js怎么解决跨域的问题呢?或许jsonp是个不错的选择. 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="js/jquery.min.js"></script> <tit

MUI跨域请求数据的例子:

<ul class="mui-table-view" style="margin-top: 25px;"> <li class="mui-table-view-cell"> <a id="about" class="mui-navigate-right"> 关于mui </a> </li> </ul> document.getEleme