必威体育Betway必威体育官网
当前位置:首页 > IT技术

JSONP——很简单!没你想的那么复杂!

时间:2019-08-19 11:13:25来源:IT技术作者:seo实验室小编阅读:71次「手机版」
 

jsonp

jsonp——很简单!没你想的那么复杂!

jsonP说白了,就是在json字符串外面包上一个:参数名称+左右括弧!

类似这样:

jsonpCallback([{“ID”:1,“Name”:“张三”},{“ID”:2,“Name”:“李四”}])

只是包了个:jsonpCallback() 而已!

AJAX调用举例:

            $.ajax({
                type: "GET",
                async: false,                  
                url: "http://192.168.0.123/ajax/JsonP.ashx?ID=1",
                data: {},
                dataType: "jsonp",//指定服务器返回的数据类型
                jsonp: "callback",//指定参数名称,可选
                jsonpCallback: "jsonpCallback",//指定回调函数名称
                success: function (data) {                    
                    alert(data.Name);
                }
            });

$.ajax在调用的url的参数里加上:&jsonp=jsonpCallback,

其中"jsonpCallback"可以替换为任意字符串,如:callbackFunction,

则ajax的"jsonpCallback"属性值也要改为:“callbackFunction”,

即:jsonpCallback: “callbackFunction”

完整的一个例子:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                type: "GET",
                async: false,
                url: "http://www.runoob.com/try/ajax/jsonp.php",
                data: {},
                dataType: "jsonp",
                jsonp: "callback",
                jsonpCallback: "callbackFunction",
                success: function (res) {
                    //alert(res);
                    $("#table1").empty();
                    var html = "";
                    html += "<tr><th>客户姓名</th></tr>";
                    for (var i = 0; i < res.length; i++) {
                        html += "<tr>"
                        html += "<td>" + res[i] + "</td>";
                        html += "</tr>";
                    }
                    $("#table1").APPend(html);
                }
            });
        });
    </script>
</head>
<body>
    <table id="table1" border="1"></table>
</body>
</html>

生存jsonp形式的json字符串 *.ashx文件:

<%@ Webhandler Language="C#" Class="TeacherAdvice" %>
using System;
using System.Web;
using Newtonsoft.Json;
using System.Data.sqlClient;
using System.Data;
/// <summary>
/// 综合评价 教师建议-JSON&JSONP
/// </summary>
public class TeacherAdvice : IHttpHandler
{
    public void Processrequest(Httpcontext context)
    {
        context.response.ContentType = "text/plain";
        //context.response.write("hello world");
        var StudentID = context.request.querystring["StudentID"];//学生id(必须的)
        var ClassID = context.Request.QueryString["ClassID"];//班级id(必须的)

        if (!string.IsNullOrEmpty(StudentID) && !string.IsNullOrWhiteSpace(StudentID) && !string.IsNullOrEmpty(ClassID) && !string.IsNullOrWhiteSpace(ClassID))
        {
            string sql = @" SELECT RTRIM([ClassID])[ClassID],[StudentID],[parentCategory],[childrenCategory],[Contents] FROM [t_TeacherAdvice]";
            sql += "        WHERE [StudentID]='" + StudentID.Trim() + "'";
            sql += "        AND RTRIM([ClassID])='" + ClassID.Trim() + "'";
            var dt = SqlHelper.ExecuteReader(sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                string json = DtToJson(dt);//真正的json字符串
                ResponseWrite(context, json);
            }
            else
            {
                ResponseWrite(context, "[]");
            }
        }
        else
        {
            ResponseWrite(context, "[]");
        }
    }
       public void ResponseWrite(HttpContext context, string json)
    {
        if (!string.IsNullOrEmpty(context.Request["callback"]))
        {
            context.Response.Write(string.format("{0}({1})", context.Request["callback"].Trim(), json));
        }
        else
        {
            context.Response.Write(json);
        }
    }
    public string DtToJson(DataTable table)
    {
        string jsonString = string.Empty;
        jsonString = JsonConvert.serializeObject(table);
        return jsonString;
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

以上代码在线体验地址:http://djk8888.3vdo.net/ajax/jsonp_test.html

源码下载地址:https://download.csdn.net/download/djk8888/10827780

三种调用jsonp的方式: https://blog.csdn.net/djk8888/article/details/84791133

相关阅读

jsonp原理详解——终于搞清楚jsonp是啥了

什么是JSONP? 先说说JSONP是怎么产生的: 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来

分享到:

栏目导航

推荐阅读

热门阅读