失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Jquery:ajax跨域请求处理

Jquery:ajax跨域请求处理

时间:2022-10-27 00:32:43

相关推荐

Jquery:ajax跨域请求处理

昨天朋友想做个图片懒加载的效果,朋友是前端的,我这边给他提供数据,程序写好了放到服务器上,本地测试访问时却报jquery跨域的问题,于是找度娘了解了一下jquey如何处理,网上有很多参考文章,但没细看,此情况会造成知识的不全面,望谅解,找了两个解决方案,具体如下:

1、直接在ashx中加入以下代码:

context.Response.Headers.Add("Access-Control-Allow-Origin", "*");

Access-Control-Allow-Origin:*表示允许任何域名跨域访问,如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow- Origin:允许的域名,例如:Add('Access-Control-Allow-Origin:');

2、在不加Access-Control-Allow-Origin 的情况下,在服务器返回jsonp(若不明白可度娘一下)格式的数据,注意:jsonp的返回格式为 sucess([{},{},...])或success({});当服务器返回jsonp的数据,前端js要对应的修改一下才能正确执行,代码如下:

服务器代码:

1 protected string LazyData() 2{ 3 List<AjaxData> list = new List<AjaxData>(); 4 int pageIndex = Convert.ToInt32(Request.Params["pageIndex"]); 5 int pageSize = Convert.ToInt32(Request.Params["pageSize"]); 6 int start = ((pageIndex - 1) * 10) + 1; 7 int end = pageIndex * pageSize; 8 string sql = @"SELECT * from (select ROW_NUMBER() OVER (ORDER BY id) as num,* from FeiShen) tt WHERE tt.num BETWEEN " + start + " AND " + end + ""; 9 DataTable table = SqlHelper.ExcuteToTable(sql);10 if (table != null && table.Rows.Count > 0)11 {12 foreach (DataRow item in table.Rows)13 {14 AjaxData data = new AjaxData()15 {16 ImageUrl = item["ImageUrl"].ToString(),17 Price = item["Price"].ToString(),18 Text = item["Text"].ToString()19 };20 list.Add(data);21 }22 }23 System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();24 return "success("+ ser.Serialize(list)+")";//这里拼接jsonp数据格式25}26 27//-------------拓展类------------------28public class AjaxData29{30 public string ImageUrl { get; set; }31 public string Price { get; set; }32 public string Text { get; set; }33}

View Code

前端js调用:

1 $.ajax({ 2 url: '/FeiShen/Ajax/Data2.ashx', 3 type: 'GET', 4 dataType: 'jsonp', 5 jsonp: 'callback', 6 jsonpCallback: "success",//这里指定回调函数为success 7 cache: false, 8 data: { pageIndex: 1, pageSize: 10, type: 'lazyData' }, 9 success: function (data) {10 if (data.length > 0)11 {12for (var i = 0; i < data.length; i++) {13 var str = "<ul><li>" + data[i].ImageUrl + "</li></ul>";14 $("#content").append(str);15}16 }17 }18 });

View Code

知识普及:

a、什么是jsonp:JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)

b、jsonp的作用:由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求

c、如何使用JSONP:上面的实例实际上是JSONP的简单表现形式,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数

如果觉得《Jquery:ajax跨域请求处理》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。