Maison  >  Article  >  interface Web  >  Quelle est la différence entre json et jsonp ? Comparaison des différences entre json et jsonp

Quelle est la différence entre json et jsonp ? Comparaison des différences entre json et jsonp

不言
不言original
2018-10-16 10:53:053052parcourir

json et jsonp sont faciles à confondre lorsque vous apprenez pour la première fois, cet article présentera donc la différence entre json et jsonp Les amis dans le besoin peuvent s'y référer.

Sans plus attendre, allons droit au but~

La différence entre json et jsonp :

Tout d'abord, il faut savoir que JSON est une sorte de format d'échange de données et JSONP est un protocole d'échange de données inter-domaines non officiel créé par les développeurs. (Les étudiants qui ne comprennent pas peuvent lire ces deux articles : Qu'est-ce que jsonp ? Explication détaillée du principe de jsonp et Que signifie json ? A quoi sert-il ? )

Jetons un coup d'œil à la comparaison entre json et jsonp

json est un format d'échange de données basé sur du texte utilisé pour décrire des données complexes. Par exemple, décrire les informations d'un élève peut écrire. comme ceci :

var student = {
 "id":"001", 
 "name":"张三", 
 "sex":"男", 
 "age":20 
 } 
 console.log(student.id); //001 
 console.log(student.name); //张三

Ensuite, vous pouvez obtenir la carte d'étudiant et le nom de l'étudiant via student.id et student.name.

Le format de données json est couramment utilisé dans le domaine du développement front-end. Ses avantages sont :

(1) Basé sur du texte brut, la transmission multiplateforme est simple ; 🎜> (2) JavaScript est pris en charge nativement et presque tous les langages backend sont pris en charge

(3) Format de données léger, occupant très peu de caractères, particulièrement adapté à la transmission sur Internet ; (4) Très lisible ;

(5) Facile à écrire et à analyser

jsonp

est un protocole d'interaction inter-domaines, qui peut être compris comme jsonp stipule comment pour transmettre des données json. Pour faire simple, json ne prend pas en charge le cross-domain, mais js peut inter-domaine. Par conséquent, les données json sont encapsulées côté serveur avec le nom de fonction js fourni par le client, puis la fonction est fournie au client. appeler, obtenant ainsi les données json. Par exemple :

Le code client est le suivant :

Le code serveur est le suivant :

$(function () {
    var user = {
        "username": "HelloWorld"
    };
    $.ajax({
        url: "http://localhost:8080/Changyou/UserInfo",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp",  //json不支持跨域请求,只能使用jsonp
        data: {
            user: JSON.stringify(user)
        },
        jsonp: "callback",  //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名,默认为callback
        jsonpCallback: "userHandler",  //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
        success: function (data) {
            $("#user_name")[0].innerHTML = data.user_name;
            $("#user_teleNum")[0].innerHTML = data.user_teleNum;
            $("#user_ID")[0].innerHTML = data.user_ID;
        },
        error: function () {
            alert("请求超时错误!");
        }
    })
});
Remarque : Bien que le client n'implémente pas le userHandler, il peut toujours réussir. Exécuter, la raison est que jquery génère automatiquement une fonction de rappel pour vous lors du traitement du type jsonp ajax et extrait les données pour que la méthode d'attribut de réussite soit appelée.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("application/json; charset=utf-8");
    String username = new String(request.getParameter("user").getBytes("ISO-8859-1"),"utf-8");
    String callback = new String(request.getParameter("callback").getBytes("ISO-8859-1"),"utf-8");
    System.out.println("接收到的数据:" + username);
    System.out.println("callback的值:" + callback);
    JSONObject user = JSONObject.fromObject(username);
    System.out.println("接收到的用户名:" + user.get("username"));
    JSONObject userinfo = new JSONObject();
    userinfo.put("user_name", "张鸣晓");
    userinfo.put("user_teleNum", "18810011111");
    userinfo.put("user_ID", "123456789098765432");
    PrintWriter out = response.getWriter();
    String backInfo = callback + "(" + userinfo.toString() + ")"; //将json数据封装在callback函数中提供给客户端
    out.print(backInfo);
    out.close();
}
Cet article se termine ici. Pour un contenu plus passionnant, vous pouvez suivre le site Web PHP chinois ! ! !


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn