关于AJAX跨域调用web api问题汇总(一)
来源:互联网 发布:弘历软件招聘 编辑:程序博客网 时间:2024/05/29 18:20
这几天在研究phonegap、phonegap利用了打包的方式将html页面打包在了apk之中,那么诸如登录、取新闻等数据从何而来来?既然我们开发的web应用,肯定ajax是我们的主角,于是问题就产生了,本地文件 请求 www.mywebapi.com 去调用数据,这时候是百分之百会存在跨域的,就这些跨域问题,本人研究了几天,网上的也是天花乱坠,但是很多经过我自己的实验,我没有办法达到我们想要的效果的,带着这些问题。我们一一来探讨,当然肯定会有不正确的地方,望大家指正。
1、关于跨域ajax请求。
跨域ajax请求网上说的非常多,也基本都正确,这里我就简单的贴出用法。
当A请求B时,如果不在同一个域下(域名、端口相同),那么当我们以ajax去请求时会发生一下错误。
$("#btnGet").click(function () { $.ajax({ type: "GET", url: "http://localhost:8066/Login/Token", success: function (result) { alert(result.result); } }); });
</pre><p><img src="http://img.blog.csdn.net/20150915085028570?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p></p><p> 产生此问题的原因,同源安全策略。网上很多不细说。解决方案:</p><p> 1、Jsonp jsonp只能以get方式,存在这大数据的限制。并且服务器端与客户端需要同时处理。</p><p> 2、w3c在的标准处理方式,在html输出头上添加 Headers.add("Access-Control-Allow-Origin","*").</p><p></p><p> jsonp不细说了,网上百度一大堆。说说第二种方式(因为是新的标准有浏览器版本的支持,部分老的浏览器不支持),不过如果你是在webapp里使用,就目前的现状应该可以放心大胆的用。</p><p> 假设你是asp.net 程序的话。可以在web.config system.webServer下加上如下代码直接解决:</p><p> <pre name="code" class="html"> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Credentials" value="true" /> <add name="Access-Control-Allow-Headers" value="Content-Type,Authorization,Accept,X-Requested-With" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol>
OK,再试试我们的代码。顺便附上web api后台测试代码
web api:
[Authentication] public class LoginController : ApiController { [AllowAnonymous] [HttpGet] public HttpResponseMessage Token() { string token; int type = 0; string partner = "admin"; string partnerKey = SecuritySignHelper.PartnerKey; NameValueCollection getCollection = new NameValueCollection(); token = getCollection.GetSecuritySign(partner, partnerKey);//不带任何参数的请求 type = 1; JavaScriptSerializer serializer = new JavaScriptSerializer(); string str = serializer.Serialize(new { type = type, result = token }); HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") }; return result; } }
0 0
- 关于AJAX跨域调用web api问题汇总(一)
- 关于AJAX跨域调用web api问题汇总(二)
- .NET AJAX进行跨域调用 MVC 或WEB API
- 关于jQuery+ajax 跨域调用问题
- ajax调用网易云APi遇到跨域问题
- 关于跨域调用web Api、Web Service等的解决方案。
- 关于AJAX 跨域请求web项目/ajax跨域session问题
- MVC4 Web Api 与 Ajax交互存在的跨域问题总结
- 简单web api跨域调用案例
- ajax常见问题汇总(一)
- 关于ajax跨域问题
- 关于ajax跨域问题
- 关于OpenClinica部署出错的问题汇总(一)
- 问题汇总(一)
- jquery ajax 调用web api传递复杂参数
- ExtJs ajax调用汇总
- ExtJs ajax调用汇总
- ExtJs ajax调用汇总
- http://blog.csdn.net/csr_yang/article/details/33325543?utm_source=tuicool
- Linux下的lds链接脚本基础
- 在VMware环境下,使用KGDB调试内核及内核模块---基于kernel 2.6.36
- Linux 时钟处理机制
- C++Primer第五版 6.1.3节练习
- 关于AJAX跨域调用web api问题汇总(一)
- 华为3G模块EM770W在LINUX下的驱动安装
- socket编程备忘录
- C++Primer第五版 6.2.1节练习
- import javax.servlet.annotation.*;出错
- iOS开发脚踏实地学习day08-QQ聊天界面
- QT 编程备忘与总结
- Teamviewer退出锁定远程计算机
- 使用U盘安装Debian8.2.0系统图文、视频教程