Ajax请求,跨域小坑
今天在上班的时候,被坐在旁边项目经理叫过去问了一个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: 0; top: 0; 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) {
});
总结:沉下心来,不要太浮躁,每天进步一点点是成功的开始!
原文地址:https://www.cnblogs.com/wuyongfu/p/7011215.html
相关推荐
-
高性能网站搭建-前端性能优化 (附Vue首屏加载时间优化详细方案) javascript/jquery
2019-6-1
-
JS/TS 的 import 和 export 用法小结 javascript/jquery
2018-12-19
-
基于 React.js + Redux + Bootstrap 的 Ruby China 示例 javascript/jquery
2020-6-12
-
查漏补缺之开g的正则 javascript/jquery
2019-8-15
-
自己动手实现一个html2canvas javascript/jquery
2018-12-16
-
js中的同步和异步 javascript/jquery
2019-5-14
-
javascript中变量的内存分配,以及const VS let javascript/jquery
2020-5-23
-
在微信小程序中使用 async/await javascript/jquery
2020-7-2
-
基于原生JS验证表单组件:xy-form javascript/jquery
2019-8-24
-
Flex网页布局二CSS弹性伸缩盒子写法教程 javascript/jquery
2020-5-18