如何用jQuery+JSONP实现跨域请求(jquery,jsonp,开发技术)

时间:2024-05-09 11:33:11 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

  问题:本地现有一个页面demo.html需要从http://localhost:3561/User/GetAllNames获取数据并展示。

  解答:由于问题中的两方不在同一服务器,故需要使用jsonp来跨域访问。

  ① 客户端编写

  客户端使用jQuery中提供的$.getJson方法来跨域访问。getJson有3个参数:

    I. url:请求地址;

    II. data:发送到服务端的参数;

    III. callback:成功时的回调函数。

  getJson的使用方法和普通的$.get方法基本一致,不同的地方在于getJson需要在url后面的参数部分加上callback=?这一固定部分,jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。然后在回调函数中操作从异域返回的json对象,回调函数callback的参数即为该json对象。

<!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title></title></head><body><ulid="nameList"></ul><scriptsrc="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script><scripttype="text/javascript">$.getJSON("http://localhost:3561/User/GetAllNames?callback=?",function(json){for(vari=0;i<json.length;i++){$("#nameList").append("<li>"+json[i]+"</li>");}});</script></body></html>

  ② 服务端编写

  服务端的逻辑主要是将数据序列化为json字符串,然后封装成"callback(json)"的形式,callback为jQuery自动生成并传到服务端的函数名称。下面使用C#实现:

publicclassUserController:Controller{publicstringGetAllNames(stringcallback){string[]names=newstring[]{"张三丰","张无忌","令狐冲","杨过","郭靖"};JavaScriptSerializerjss=newJavaScriptSerializer();stringjson=jss.Serialize(names);returnstring.Format("{0}({1})",callback,json);}}

  至此,便成功解决了问题。

如何用jQuery+JSONP实现跨域请求

 思考:如果服务端已经写死了callback(如:return string.Format("moty({0})", json);),那么客户端该怎么写呢?

 参考:

$.ajax("http://localhost:3561/User/GetAllNames",{jsonpCallback:"moty",dataType:"jsonp",success:function(json){for(vari=0;i<json.length;i++){$("#nameList").append("<li>"+json[i]+"</li>");}}});
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何用jQuery+JSONP实现跨域请求的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:jQuery怎么实现HTML页面文本框模糊匹配查询功能下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18