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+"\"";

            }

        }

  

你可能感兴趣的:(jsonp)