转载:http://www.cnblogs.com/choon/p/5393682.html
demo
用动态创建<script></script>节点的方式实现了跨域HTTP请求,给<script>标签的src属性中的URL添加一个参数来指定回调函数的名称
服务端:
1
2
3
4
5
6
7
8
9
10
11
|
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain" ; // 前端指定的回调函数名称 var callbackFuncName = context.Request.QueryString[ "callback" ]; var responseData = "Hello World" ; // 回调脚本,形如:handler('responseData'); var scriptContent = string .Format( "{0}('{1}');" , callbackFuncName, responseData); context.Response.Write(scriptContent); } |
Web客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<! DOCTYPE html> < html > < head > < meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> < title >jsonp demo</ title > < script type="text/javascript"> // 跨域发送HTTP请求,从服务端获取字符串"Hello World" function getHello() { var script = document.createElement('script'); script.setAttribute('src', 'http://localhost:8546/Service.ashx?callback=handler');//callback指定回调函数名称 document.querySelector("head").appendChild(script); } // 处理函数 function handler(data) { alert(data); // our code here... } </ script > </ head > < body > < input type="button" value="发送跨域HTTP请求,获取Hello World" onclick="getHello()" /> </ body > </ html > |