jsonp实现跨域请求

  在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

 $.ajax({
            async: false,
            url: "http://local.temp.uploading.com/GetPicture.ashx?param=5d6c8bcc-7d20-4321-ace9-de73310a3dd5^RENTHOUSEDOCUMENTWITHSIGN",
            type: "GET",
            dataType: 'jsonp',
            //jsonp的值自定义,如果使用jsoncallback,那么服务器端,要返回一个jsoncallback的值对应的对象. 
            jsonp: 'jsonpCallback',
            //要传递的参数,没有传参时,也一定要写上 
            data: null,
            timeout: 5000,
            //返回Json类型 
            contentType: "application/json;utf-8",
            //服务器段返回的对象包含name,data属性. 
            success: function (result) {
                alert(result.url);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus);
            }
        });

 服务器返回

 context.Response.Write(Jsonp(context,
                        "\"url\":\"" + rooturl + Common.GetImagePath(userGuid) + dt.Rows[0]["FileName"]
                        + ".mark.jpg\",\"id\":\"" + dt.Rows[0]["Id"].ToString() + "\",\"original\":\"" + rooturl + Common.GetImagePath(userGuid) + dt.Rows[0]["FileName"] + "\""
                        ));
				
/// <summary>
        /// 处理Json读取数据.
        /// </summary>
        /// <param name="context">Http对象.</param>
        /// <param name="s">结果值</param>
        /// <returns></returns>
        private string Jsonp(HttpContext context, string s)
        {
            try
            {
                string ret = context.Request["jsonpCallback"];//jsonpCallback
                string rs = ret+ "({" + s + "})";
                return rs;
            }
            catch
            {
                return "result:true"+",data:\""+s+"\"";
            }
        }

  

posted @ 2015-04-17 13:44  馒头的梦想  阅读(211)  评论(0编辑  收藏  举报