Home >Web Front-end >JS Tutorial >Cross-domain request method through jQuery+JSONP (detailed tutorial)

Cross-domain request method through jQuery+JSONP (detailed tutorial)

亚连
亚连Original
2018-06-01 10:46:101568browse

After understanding jsonp, everyone should also understand that jsonp is mainly used to obtain cross-domain data. Today we will discuss in detail how to apply jsonp to achieve cross-domain implementation in practice

 JSONP (JSON with Padding) is a "usage mode" of JSON that can be used to solve the problem of cross-domain data access in mainstream browsers. Due to the same-origin policy, generally speaking, web pages located at server1.example.com cannot communicate with servers other than server1.example.com, with the exception of the HTML 3f1c4e4b6b16bbbd69b2ee476dc4f83a element. Using this open policy of the 3f1c4e4b6b16bbbd69b2ee476dc4f83a element, web pages can obtain JSON data dynamically generated from other sources, and this usage pattern is called JSONP. The data captured with JSONP is not JSON, but arbitrary JavaScript, which is executed with a JavaScript interpreter instead of parsed with a JSON parser.

The above paragraph comes from Baidu Encyclopedia. Concepts are always so abstract and difficult to understand. Looking at examples is the most intuitive expression. After seeing too many examples and understanding that point, you will naturally learn to describe it abstractly. This is why it is often said that "learning knowledge is a process from thin to thick, and from thick to thin." Okay, let’s go too far. Let’s look directly at an example.

 Problem: There is a local page demo.html that needs to obtain data from http://localhost:3561/User/GetAllNames and display it.

Answer: Since the two parties in the question are not on the same server, jsonp needs to be used for cross-domain access.

① Client-side writing

The client uses the $.getJson method provided in jQuery for cross-domain access. getJson has 3 parameters:

ONE posit I. url: request address;

posit .

The usage method of getJson is basically the same as the ordinary $.get method. The difference is that getJson needs to add callback=? to the parameter part after the url. This fixed part, jQuery will automatically replace ? with the correct one. Function name to execute the callback function. Then operate the json object returned from the foreign domain in the callback function, and the parameter of the callback function callback is the json object.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
</head>
<body>
  <ul id="nameList"></ul>

  <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
  <script type="text/javascript">
    $.getJSON("http://localhost:3561/User/GetAllNames?callback=?", function(json) {
      for (var i = 0; i < json.length; i++) {
        $("#nameList").append("<li>" + json[i] + "</li>");
      }
    });
  </script>
</body>
</html>

 ② Server-side writing

The logic of the server-side is mainly to serialize the data into a json string, and then encapsulate it into the form of "callback(json)". The callback is automatically generated and transmitted by jQuery. Function name to the server. The following is implemented using 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);
  }
}

At this point, the problem has been successfully solved.

Thinking: If the server has hard-coded callback (such as: return string.Format("moty({0})", json);), then the client How to write it?

Reference:

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

The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.

Related articles:

Using ES6 to solve the memory leak problem through WeakMap (detailed tutorial)


Node.JS loop deletion All files in non-empty folders and subdirectories


Detailed explanation of the relationship between prototype and __proto__ in Javascript


The above is the detailed content of Cross-domain request method through jQuery+JSONP (detailed tutorial). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn