今天在上班的时候,被坐在旁边项目经理叫过去问了一个Ajax请求跨域的问题,一开始没理解清楚也还有对这个没有理解的透,后面被打击的要死。

当时的需求是需要测试一个已发布的api接口,需要在本地写测试程序去测试接口。

当时的看到代码大概是这个样子

$(document).ready(function () {
var args = {
method: "Post",
url: "Test",
data: ({ "id": "FB850EE4-48EE-4502-BFE2-736B02899224" })
// url: "http://xxxxxx/xxxx/api/agency/GetOne",
};
$.ajax(args).done(function (data) { });
});

当时我犯的第一个错误,没有理解跨域JSONP的概念

JSONP使用只能在GET方式下才能生效,dataType修改成post在Jquery也会转成GET方式,然而这个接口不支持GET方式请求。

  var args = {
method: "POST",
// url: "Test",
dataType: 'JSONP',
data: ({ "id": "FB850EE4-48EE-4502-BFE2-736B02899224" }),
url: "http://xxxxxxx/xxxx/api/agency/GetOne",
};
$.ajax(args).done(function (data) {
});

所以就在后面看到了类似于这样的代码,修改成用WebClient服务器发送POST请求跨域请求的问题。

  public ActionResult Test(string id)
{
var url = "http://xxxxxxx/xxxx/api/agency/GetOne";
System.Net.WebClient wCient = new System.Net.WebClient();
wCient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] postData = System.Text.Encoding.ASCII.GetBytes("id="+ id);
byte[] responseData = wCient.UploadData(url, "POST", postData);
string returnStr = System.Text.Encoding.UTF8.GetString(responseData);//返回接受的数据
return Json(new { rows = returnStr }, JsonRequestBehavior.AllowGet);
}

关于AJAX相关的例子已经很多了,在这里附上一个简单封装过得例子

base类

var base = {
/**
* 遮罩层加载
* @returns {}
*/
ajaxLoading: function() {
$("<div class=\"datagrid-mask\"></div>").css({ display: "block", width: "100%", height: $(window).height() }).appendTo("body");
$("<div class=\"datagrid-mask-msg\"></div>").html("正在处理,请稍候...").appendTo("body").css({ display: "block", left: ($(document.body).outerWidth(true) - 190) / 2, top: ($(window).height() - 45) / 2 });
},
/**
* 遮罩层关闭
* @returns {}
*/
ajaxLoadEnd: function() {
$(".datagrid-mask").remove();
$(".datagrid-mask-msg").remove();
},
/**
*
* @param {} args ajax参数
* @param {} callback 回调函数
* @param {} isShowLoading 是否需要加载动态图片
* @returns {}
*/
ajax: function(args, callback, isShowLoading) {
//采用jquery easyui loading css效果
if (isShowLoading) {
base.ajaxLoading();
}
args.url = args.url;
args = $.extend({}, { type: "POST", dataType: "json" }, args);
$.ajax(args).done(function(data) {
if (isShowLoading) {
base.ajaxLoadEnd();
}
if (callback) {
callback(data);
}
})
.fail(function() {
if (isShowLoading) {
base.ajaxLoadEnd();
} else {
window.top.topeveryMessage.alert("提示", "操作失败");
}
});
}
}

css

.datagrid-mask {
position: absolute;
left:;
top:;
width: 100%;
height: 100%;
opacity: 0.3;
filter: alpha(opacity=30);
display: none;
} .datagrid-mask-msg {
position: absolute;
top: 50%;
margin-top: -20px;
padding: 10px 5px 10px 30px;
width: auto;
height: 40px;
border-width: 2px;
border-style: solid;
display: none;
} .datagrid-mask-msg {
background: #ffffff url('../Img/loading.gif') no-repeat scroll 5px center;
} .datagrid-mask {
background: #ccc;
} .datagrid-mask-msg {
border-color: #D4D4D4;
}

方法调用

 base.ajax({
type: "POST",
url: "",//url
contentType: "application/json",
data: JSON.stringify({})
}, function(row) {
});

总结:沉下心来,不要太浮躁,每天进步一点点是成功的开始!

Ajax请求,跨域小坑的更多相关文章

  1. day78_淘淘商城项目_11_单点登录系统实现 + 用户名回显 + ajax请求跨域问题详解_匠心笔记

    课程计划 1.SSO注册功能实现 2.SSO登录功能实现 3.通过token获得用户信息 4.ajax跨域请求解决方案--jsonp 1.服务接口实现   SSO系统就是解决分布式环境下登录问题的,本 ...

  2. 解决ajax请求跨域

    跨域大部分需要通过后台解决,引起跨域的原因: 3个问题同时满足 才可能产生跨域问题,即跨域(协议,主机名,端口号中有一个不同就产生跨域) 下面是解决方法 方法一 // ajax请求跨域 /* *解决a ...

  3. 解决Ajax请求跨域问题

    from:https://blog.csdn.net/wang379275614/article/details/53333775 上篇文章提到,由于浏览器的同源策略,使得,AJAX请求只能发给同源的 ...

  4. 处理Ajax请求跨域问题

    ajax跨域的原理 ajax出现请求跨域错误问题,主要原因就是因为浏览器的“同源策略”. CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resourc ...

  5. 关于ajax请求跨域问题

    jQuery中的异步请求跨域的方法: xhrFields: {withCredentials: true} 当设置为  true时,表示允许跨域: false时,表示禁止跨域

  6. Ajax请求跨域问题 -- 转载

    几乎每种浏览器都存在默认的安全机制,都有同源策略,因为浏览器恶意的把每个外部请求的都当做是黑客攻击,相当于是对自身的保护,所以浏览器在运行脚本时会判断脚本与请求的页面是否是同一来源,这个同一来源,包括 ...

  7. ajax请求跨域问题

    ajax跨域,这个是面试的时候常被问到,也是在做项目的时候会遇到的问题,在之前的项目中就有遇到过,这里根据经验写了三种分享下 1.使用中间层过渡的方式 简单来说就是"后台代理",把 ...

  8. web api 解决Ajax请求跨域问题

    前端ajax请求接口时,经常出现跨域问题,当然了解决方法有很多种,比如: http://www.jb51.net/article/68424.htm 我本人恰好前后端都会一点,所以直接在接口端处理. ...

  9. WebApp开发:ajax请求跨域问题的解决

    服务端:PHP 客户端:Andorid, HTML5, jQuery, ajax 现象:本想通过jQuery的ajax功能从服务器取回数据存到手机的缓存里,结果总是错误,后来想到可能是跨域问题,所以查 ...

随机推荐

  1. react基于nodejs简单的搭建与开发方法

    只需安装babel命令,即可将react的jsx写法转换成浏览器认识的js写法 1.安装nodejs(百度下载安装即可,自带npm) 2.cmd打开命令行,cd进入在自己的文件夹下 执行命令: npm ...

  2. bootstrap快速入门笔记(三)响应式,行,列,偏移量,排序

    一,响应式列重置 .clearfix <div class="row"> <div class="col-xs-6 col-sm-3"> ...

  3. 使用ioctl向linux内核传递参数的方法实例

    该篇实例是摘自网络(无法追根溯源倒低是哪位"前"辈写的了) 一.应用层 uint16 data16; if ((fd = socket(AF_INET, SOCK_STREAM, ...

  4. web安全—浏览器的进制

    浏览器的进制 字符的ascii码值可以转化为进制形式.可以用来绕过XSS filter. HTML属性值中的进制使用 .十进制使用a 表示,&#作为前缀,;作为后缀,后缀也可以没有. 如果要使 ...

  5. 浅谈Web的流量控制

    想聊一聊流量控制,谈谈的重要性,解决了哪些业务问题,那我们问题来进入正题.   1.WEB容器如何流量控制?   一个Tomcat的容器,这个容器呢,部署在一台服务器上面,同时这台服务器的资源非常非常 ...

  6. redis 主从配置实例、注意事项、及备份方式

    这两天在配置线上使用的redis服务.总得看起来,redis服务的配置文件还是非常简洁.清楚,配置起来非常顺畅,赞一下作者. 下面是我使用的配置,使用主从模式,在master上关掉所有持久化,在sla ...

  7. C#中 Equals和= =的区别

    C#中 Equals和= =的区别 前言:最近感觉技术进步实在是太慢,一直被游戏缠身不能自拔哈哈,但是游戏打多了真的是感觉整个人浮躁的不行,所以我现在要去游戏多写代码多看书,今天在博客园中看到一个前辈 ...

  8. NodeJS+Express+MongoDB 简单实现数据录入及回显展示【适合新人刚接触学习】

    近期在看NodeJS相关 不得不说NodeJS+Express 进行网站开发是很不错,对于喜欢玩JS的来说真是很好的一种Web开发组合 在接触NodeJS时受平时Java或者C#中API接口等开发的思 ...

  9. Python常见的错误汇总

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...

  10. Git相关操作及记录

    一.软件 1.下载Git客户端软件 Widows平台: https://github.com/git-for-windows/git/releases/download/v2.13.0.windows ...