利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据

本文介绍了一个简单的跨域请求实现方案,包括使用 *.handler 和 WebService 的两种方式,并提供了具体的代码示例。

原文:  http://blog.youkuaiyun.com/polarissky/article/details/6429554

1.新建数据源项目CrossDomain

    主要文件如下:

   1.Handler.ashx  作为jquery跨域请求*.handler的响应,代码如下:

   
    using System;  
    using System.Collections.Generic;  
    using System.Web;  
    using System.Web.Services;  
    namespace CrossDomain  
    {  
        /// <summary>  
        /// $codebehindclassname$ 的摘要说明  
        /// </summary>  
        [WebService(Namespace = "http://tempuri.org/")]  
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
        public class Handler : IHttpHandler  
        {  
            public void ProcessRequest(HttpContext context)  
            {  
                context.Response.ContentType = "text/plain";  
                string callbackMethodName = context.Request.Params["jsoncallback"];  
                string currentCity = context.Request["city"];  
                currentCity = string.IsNullOrEmpty(currentCity) ? "北京" : "沈阳";  
                string result = callbackMethodName + "({/"city/":" + "/"" + currentCity + "/", /"dateTime/":" + "/"" + DateTime.Now + "/"});";  
                context.Response.Write(result);  
            }  
            public bool IsReusable  
            {  
                get  
                {  
                    return false;  
                }  
            }  
        }  
    }  


  2.WebService.asmx  作为jquery跨域请求WebService的响应,代码如下:

 

    using System;  
    using System.Collections.Generic;  
    using System.Web;  
    using System.Web.Services;  
    namespace CrossDomain  
    {  
        /// <summary>  
        /// WebService 的摘要说明  
        /// </summary>  
        [WebService(Namespace = "http://tempuri.org/")]  
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  
        [System.ComponentModel.ToolboxItem(false)]  
        public class WebService : System.Web.Services.WebService  
        {  
            [WebMethod]  
            public void HelloWorld(string city)  
            {  
                string callbackMethodName = HttpContext.Current.Request.Params["jsoncallback"] ?? "";  
                city = string.IsNullOrEmpty(city) ? "北京" : "沈阳";  
                string result = callbackMethodName + "({/"city/":" + "/"" + city + "/", /"dateTime/":" + "/"" + DateTime.Now + "/"});";  
                HttpContext.Current.Response.Write(result);  
                HttpContext.Current.Response.End();  
            }  
            [WebMethod]  
            public void ws(string name, string time)  
            {  
                HttpRequest Request = HttpContext.Current.Request;  
                string callback = Request["callback"];  
                HttpResponse Response = HttpContext.Current.Response;  
                Response.Write(callback + "({msg:'this is" + name + "jsonp'})");  
                Response.End();  
            }  
        }  
    }  



  3.Web.config 需要修改web.config文件,注意webServices节(这是请求webservice获取数据的关键)具体如下:

 
    <?xml version="1.0" encoding="utf-8"?>  
    <configuration>  
      
        
        <appSettings/>  
        <connectionStrings/>  
        
        <system.web>  
            <!--   
                设置 compilation debug="true" 可将调试符号插入  
                已编译的页面中。但由于这会   
                影响性能,因此只在开发过程中将此值   
                设置为 true。  
            -->  
            <compilation debug="false">  
            </compilation>  
            <!--  
                通过 <authentication> 节可以配置 ASP.NET 用来   
                识别进入用户的  
                安全身份验证模式。   
            -->  
            <authentication mode="Windows" />  
            <!--  
                如果在执行请求的过程中出现未处理的错误,  
                则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,  
                开发人员通过该节可以配置  
                要显示的 html 错误页  
                以代替错误堆栈跟踪。  
            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">  
                <error statusCode="403" redirect="NoAccess.htm" />  
                <error statusCode="404" redirect="FileNotFound.htm" />  
            </customErrors>  
            -->  
          <webServices>  
            <protocols>  
              <add name="HttpGet"/>  
              <add name="HttpPost"/>  
            </protocols>  
          </webServices>  
        </system.web>  
    </configuration>  

 

2.新建跨域请求测试项目CrossDomainRequestTest

   主要文件如下:

 1.CrossDomainRequestHandler.htm 跨域请求*.handler获取josn格式数据测试页,代码如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml" >  
    <head>  
        <title></title>  
            <mce:script type="text/javascript" language="javascript" src="js/jquery-1.4.4.js" mce_src="js/jquery-1.4.4.js"></mce:script>  
        <mce:script type="text/javascript" language="javascript" src="js/jquery-1.4.4.js" mce_src="js/jquery-1.4.4.js"></mce:script>  
        <mce:script type="text/javascript" language="javascript"><!--  
            $(document).ready(function() {  
    //        var clientUrl = "http://localhost:4508/Handler.ashx?jsoncallback=?";  
            var clientUrl = "http://192.168.120.179:8086/Handler.ashx?jsoncallback=?"  
            var currentCity = "哈尔滨";  
            $.ajax({  
                url: clientUrl,  
                dataType: "jsonp",  
                    data : {city : currentCity},  
                    success : OnSuccess,  
                    error : OnError  
                });  
            });  
            function OnSuccess(json) {  
                $("#data").html("城市:" + json.city + ",时间:" + json.dateTime);  
            }  
            function OnError(XMLHttpRequest, textStatus, errorThrown) {  
                targetDiv = $("#data");  
                if (errorThrown || textStatus == "error" || textStatus == "parsererror" || textStatus == "notmodified") {  
                    targetDiv.replaceWith("请求数据时发生错误!");  
                    return;  
                }  
                if (textStatus == "timeout") {  
                    targetDiv.replaceWith("请求数据超时!");  
                    return;  
                }  
            }  
          
    // --></mce:script>  
    </head>  
    <body>  
    <div id="data"></div>  
    </body>  
    </html>  




  2.CrossDomainRequestWebService.htm 跨域请求WebService *.asmx获取josn格式数据测试页,代码如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml" >  
    <head>  
        <title></title>  
            <mce:script type="text/javascript" language="javascript" src="js/jquery-1.4.4.js" mce_src="js/jquery-1.4.4.js"></mce:script>  
        <mce:script type="text/javascript" language="javascript"><!--  
            $(document).ready(function() {  
    //            var clientUrl = "http://localhost:4508/WebService.asmx/HelloWorld?jsoncallback=?";  
                var clientUrl = "http://192.168.120.179:8086/WebService.asmx/HelloWorld?jsoncallback=?";  
                var currentCity = "哈尔滨";  
                $.getJSON(  
                    clientUrl,  
                    { city: currentCity },  
                    function(json) {  
                        $("#data").html("城市:" + json.city + ",时间:" + json.dateTime);  
                    }  
                );  
            });  
            function OnSuccess(responseData) {  
                $("#data").html(responseData.city);  
            }  
            function OnError(XMLHttpRequest, textStatus, errorThrown) {  
                targetDiv = $("#data");  
                if (errorThrown || textStatus == "error" || textStatus == "parsererror" || textStatus == "notmodified") {  
                    targetDiv.replaceWith("请求数据时发生错误!");  
                    return;  
                }  
                if (textStatus == "timeout") {  
                    targetDiv.replaceWith("请求数据超时!");  
                    return;  
                }  
            }  
          
    // --></mce:script>  
    </head>  
    <body>  
    <div id="data"></div>  
    </body>  
    </html>  


源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值