javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"

发布时间:2019-02-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 关键字:jsonp

 

jsonp的原理:同约束限制了js脚本的跨域访问,但是<script>和<iframe>的src标签引用的js文件(只要响应正文是符合js语法的文本即可,不一定是js文件),没有限制。

 

简述:

 

浏览器端定义callback函数,名字可以随意,暂且把它就叫callback,然后把改名字传给跨域(刚好可以跨域,也可以是同域,即实现了非XMLHttPRequest也可以ajax),

 

服务器的响应正文,是callback函数的调用,注意整个正文都需要符合js语法,这样巧妙的实现了跨域。

 

上代码,自己写的demo,在别人的代码上有改进:

 

复制代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" InherITs="WebApplication2.WebForm1" %>

 

<!DOCTYPE htML>

 

<html xmlns="https://www.w3.org/1999/xhtml">

<head runat="server">

<;meta http-equiv="Content-type" content="text/html; charset=utf-8"/>

    <title></title>

    <script type="text/javascript">

        VAR url = "https://www.a.COM:8065/Handler1.ashx?c=callback";  //www.a.com本系统目录的hosts中配置下即可,映射到127.0.0.1

        function p(src) {

            //参数r是避免ie浏览器的缓存,在IE中如果短时间请求相同的url,不会从服务器读取,而是从缓存读取

            var u = src + "&r=" + parseint((Math.random() * 100000000000000000));

            var d = document.createElement("script");

            d.setattribute("type", "text/javascript");

            d.src = u;

            document.body.appendChild(d);

        }

 

        function callback(d) { 

            document.getElementById("e").innerHTML = d;

        }

 

        window.onload = function () {

            p(url);

        };

    </script>

</head>

<body>

    <form id="form1" runat="server">

    <p>test

        <span id="e"></span>

        <input type="button" value="重新请求" title="重新请求"  onclick="p(url)" />       

    </p>

    </form>

</body>

</html>

复制代码

www.a.com:8066的handler1.aspx.cs的代码

 

复制代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

namespace WebApplication1

{

    /// <summary>

    /// Handler1 的摘要说明

    /// </summary>

    public class Handler1 : IHttpHandler

    {

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.ContentType = "application/javascript";//该值不影响结果

            var c=context.Request["c"];

            context.Response.Write(c + "('" +Guid.NewGuid().ToString()+ "')");//注意传给callbak函数的参数,是js语法,所以要加引号

        }

 

        public bool IsReusable

        {

            get

            {

                return false;

            }

        }

    }

}

 

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"全部内容,希望文章能够帮你解决javascript代码实例教程-由“js跨域”想到"AJAX也不一定要XMLHttpRequest"所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。