asp.net MVC jsonp跨域获取数据

public class JsonpResult : JsonResult
    {
        object _data = null;
        public JsonpResult() { }
        public JsonpResult(object data)
        {
            this._data = data;
        }
        public override void ExecuteResult(ControllerContext context)
        {
            if(context != null)
            {
                HttpResponseBase response = context.HttpContext.Response;
                HttpRequestBase request = context.HttpContext.Request;
                string callbackFunction = request["callback"];
                if(string.IsNullOrEmpty(callbackFunction))
                {
                    throw new Exception("callback function name is empty");
                }
                response.ContentType = "application/x-javascript";
                if(_data != null)
                {
                    string strjson = Newtonsoft.Json.JsonConvert.SerializeObject(_data);
                    response.Write(string.Format("{0}({1});", callbackFunction, strjson));
                }
            }
        }
    }
public class apiController : Controller
    {
        // GET: api
        /// <summary>
        /// 登入账号
        /// </summary>
        /// <returns></returns>
        public JsonpResult getUserName()
        {
            return new JsonpResult(new { name = User.Identity.Name });
        }
        /// <summary>
        /// 是否已经登入,已登入islogin=1,否则为0
        /// </summary>
        /// <returns></returns>
        public JsonpResult isUserLogin()
        {
            return new JsonpResult(new { islogin = Request.IsAuthenticated ? 1 : 0 });
        }
    }

client:

<script type="text/javascript">
        var hxsso = function (url) {
            return {
                checkIsLogin: function (callbackfun) {
                    $.ajax({
                        url: url + "/api/isUserLogin",
                        type: "GET",
                        dataType: "jsonp",
                        jsonp: "callback",
                        success: function (data) {
                            if (callbackfun) {
                                callbackfun(data.islogin);
                            }
                        }
                    });
                },
                loginName: function (callbackfun) {
                    $.ajax({
                        url: url + "/api/getUserName",
                        type: "GET",
                        dataType: "jsonp",
                        jsonp: "callback",
                        success: function (data) {
                            if (callbackfun) {
                                callbackfun(data.name);
                            }
                        }
                    });
                }
            }
        }
        $(function () {
            var ssoObj = hxsso("http://192.168.16.241:8520");
            //var ssoObj = new hxsso("http://www.2.sso.com");
            ssoObj.checkIsLogin(loginOnCallBack);
            function loginOnCallBack(islogin) {
                var url = "";
                if (islogin) {
                    $("#ploginOut").show();
                    $("#plogin").hide();
                    if ("@isLogin" == "0") {//sso已经登入,本地未登入,这就需要本地保存自己的cookie。
                        ssoObj.loginName(setUserCookie);
                    }
                }
                else {
                    $("#ploginOut").hide();
                    $("#plogin").show();
                    if ("@isLogin" == "1") {//sso未登入,本地确已经登入,这就需要注销本地的。
                        url = "/Home/RemoveUserCookie";
                        $.ajax({
                            url: url,
                            type: "GET",
                            success: function (data) {
                            }
                        });
                    }
                }
            }
            function setUserCookie(name) {
                $.ajax({
                    url: "/Home/SetUserCookie?name=" + name,
                    type: "GET",
                    success: function (data) {
                    }
                });
            }
        })

    </script>
时间: 2024-10-13 16:35:26

asp.net MVC jsonp跨域获取数据的相关文章

笔记-Ajax[4]-JSONP跨域获取数据。

JS的跨域:跨域名获取数据,a域名获取b域名中的数据. 解决跨域获取数据的方法也叫JSONP(JSON and Padding) JSONP方法: 1:服务器代理:XMLHttpRequest代理文件 2:script标签:jsonp(常用);//利用script标签的src引入外部文件的功能,src能够引入任何的文件的类型 3:location.hash方式:iframe 4:window.name方式 5:flash方式 6:html5的postMessage方式 例子:百度输入数据下拉框提

ajax 跨域获取数据jsonp使用

昨天帮同事从其他服务器传过来的json数据进行处理,遇到该问题.开始我的思路是用ajax直接请求把数据弄出来就OK了,然而出错了.原因是我使用的ajax 返回类型为json,默认ajax阻止跨服获取数据的.结合其他博文,ajax的dataType使用jsonp来解决此问题.开始觉得jsonp与json的使用类似,一步步的写着代码,如下: $.ajax({ type:'get', async:false, url:'http://112.11.131.238/nanhunongjing/GetCo

使用图片跨域方式获取图片数据 使用 jsonp 方式跨域获取数据

使用图片跨域方式获取图片数据 server.get(`/mockImg`, (req, res, next) => { // 使用图片跨域方式获取图片数据 req.headers.origin && res.setHeader(`Access-Control-Allow-Origin`, req.headers.origin) res.setHeader(`content-type`, `image/gif`) res.setHeader(`data`, `image/gif`) v

XMLHTTPRequest对象不能跨域获取数据?!

写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一个json文件过来),运行就跑不起来了. 这就涉及到跨域获取数据的问题了. 我运行时的环境是这样的: 本地服务器运行当前代码.转向http://gumball.wickedlysmart.com获取一个json文件过来. 结果:报错. XMLHttpRequest cannot load   No

利用window.name+iframe跨域获取数据详解

详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.iframe是html的一个标签,可以在网页中创建内联框架,有个src属性(指向文件地址,html.php等)可以选择内联框架的内容,可以看个例子(猛戳这里),大概了解下就行了.window.name(一般在js代码里出现)的值不是一个普通的全局变量,而是当前窗口的名字,这里要注意的是每个iframe都有包

使用JSONP跨域请求数据

下面代码,可以使用JSONP进行跨域请求数据,Insus.NET记录以下,以备忘记. 使用JSONP跨域请求数据

NodeJS express跨域获取数据

这几天一直在研究NodeJS跨域获取数据的事情,然后找到了一个好用的模块request. 一.先把咱们的主要模块引用进来: 这里我使用的是express var express = require('express');var router = express.Router();var request = require('request');request需要安装,方法为:npm install ––save request 二.路由部分 router.get('/',function(req

Ajax的jsonp方式跨域获取数据

jsonp的调用,今天碰到了,正好整理了一下. <!DOCTYPE html> <html> <head> <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#b

ASP.NET MVC 实现跨域请求的两种形式

一.使用jsonp请求 1 $.ajax({ 2 type: "GET", 3 url: "http://10.174.1.1/Home/Test?callback=?", 4 data: { id: "1" }, 5 dataType: "jsonp", 6 jsonp: "callback", 7 success: function (data) { 8 alert(data); 9 }, 10 err