jsonp的本质是通过script标签的src属性请求到服务端,拿到到服务端返回的数据 ,因为src是可以跨域的。前端通过src发送跨域请求时在请求的url带上回调函数,服务端收到请求时,接受前端传过来的回掉函数名称,将其拼接成js函数调用返回到前端即可完成跨域请求。
前端实现代码:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>document</title> </head> <body> </body> </html> <script> function successfun(data) { console.log(data); } function show(data) { console.log(data); } </script> <!-- 把请求的成功的回掉函数名称通过url传参传到服务端,服务端返回时需要拼接一个函数调用返回到前端 --> <script src="https://localhost:44381/home/action?cb=show"></script> <script src="https://localhost:44381/home/getscript?cb=successfun"></script>
.net服务端代码:
using system.collections.generic; using microsoft.aspnetcore.mvc; using newtonsoft.json; namespace jsonp.controllers { public class homecontroller : controller { public iactionresult action() { var cb = request.query["cb"]; return content(cb + "(123)"); } public iactionresult getscript() { var cb = request.query["cb"]; var data = new list<int>() { 1,2,3,4,5,6,8,9,6,3,5,2,0,3 }; var result = $"{cb}({jsonconvert.serializeobject(data)})"; return content(result); } } }
如对本文有疑问, 点击进行留言回复!!
asp.net中ajax和一般处理程序(handler.ashx)的交互
egg.js创建项目,目录介绍,简单使用,sequelize mysql使用
网友评论