博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsonp跨域+ashx(示例)
阅读量:5751 次
发布时间:2019-06-18

本文共 2151 字,大约阅读时间需要 7 分钟。

前言

  做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件,这时候就访问不了。关于jsonp其实是老生常谈的话题,园中也有不少文章介绍,可以把jsonp看成一个协议或模式,这边就不多说,我们只看示例。

正常实现

  我们先看下代码:

1         public void ProcessRequest(HttpContext context) 2         { 3             string type = context.Request.QueryString["type"].ToString(); 4             string result = ""; 5             switch (type) 6             { 7                 case "1": 8                     result = "one"; 9                     break;10                 case "2":11                     result = "two";12                     break;13                 case "3":14                     result = "three";15                     break;16                 default:17                     result = "other";18                     break;19             }20             context.Response.ContentType = "text/plain";21             context.Response.Write(result);22         }

  前台js代码:

  上面的代码不需要解释太多,就是前台通过ajax传过去参数,ashx进行处理并返回处理结果,前台呈现,这是我们一般正常通过ashx做的异步操作,注意现在是前后台在同一个项目下。

  运行结果:

jsonp跨域

  上面的示例ajax代码中url如果改成别的域名下的ashx文件,就会出现访问错误,通过jsonp可以解决跨域问题,上面的代码我们修改下:

  ashx代码:

1         public void ProcessRequest(HttpContext context) 2         { 3             string type = context.Request.QueryString["type"].ToString(); 4             string callback = HttpContext.Current.Request["jsoncallback"]; 5             string result = ""; 6             switch (type) 7             { 8                 case "1": 9                     result = "one";10                     break;11                 case "2":12                     result = "two";13                     break;14                 case "3":15                     result = "three";16                     break;17                 default:18                     result = "other";19                     break;20             }21             context.Response.ContentType = "application/json";22             context.Response.ContentEncoding = System.Text.Encoding.UTF8;23             context.Response.Write(callback + "({\"result\":\"" + result + "\"})");24             context.Response.End();25         }

  前台js代码:

1     

  注意上面的url,ashx和前台页面并不是在一个项目下。

  运行结果:

  示例代码下载:

 

转载地址:http://egzkx.baihongyu.com/

你可能感兴趣的文章
后端技术精选 - 收藏集 - 掘金
查看>>
Laravel 服务容器
查看>>
mac安装kubernetes并运行echoserver
查看>>
多页架构的前后端分离方案(webpack+express)
查看>>
算法(第4版) Chapter 1
查看>>
前端技术选型的遗憾和经验教训
查看>>
“亲切照料”下的领域驱动设计
查看>>
SRE工程师到底是做什么的?
查看>>
解读:Red Hat为什么收购Ansible
查看>>
Ossim下的安全合规管理
查看>>
DelphiWebMVC框架下BPL热部署实现
查看>>
C++与MySQL的冲突
查看>>
siki学习之观察者模式笔记
查看>>
spring.net 继承
查看>>
ES6:模块简单解释
查看>>
JavaScript indexOf() 方法
查看>>
ZJU PAT 1023
查看>>
WMI远程访问问题解决方法
查看>>
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>