千家信息网

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

发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,今天小编给大家分享一下如何用jQuery+JSONP实现跨域请求的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,
千家信息网最后更新 2025年02月21日如何用jQuery+JSONP实现跨域请求

今天小编给大家分享一下如何用jQuery+JSONP实现跨域请求的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

  问题:本地现有一个页面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对象。

    

      ② 服务端编写

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

    public class UserController : Controller{    public string GetAllNames(string callback)  {    string[] names = new string[] { "张三丰", "张无忌", "令狐冲", "杨过", "郭靖" };    JavaScriptSerializer jss = new JavaScriptSerializer();    string json = jss.Serialize(names);    return string.Format("{0}({1})", callback, json);  }}

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

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

     参考:

    $.ajax("http://localhost:3561/User/GetAllNames", {  jsonpCallback: "moty",  dataType: "jsonp",  success: function(json) {    for (var i = 0; i < json.length; i++) {      $("#nameList").append("
  • " + json[i] + "
  • "); } }});

    以上就是"如何用jQuery+JSONP实现跨域请求"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

    0