博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ajax、jsonp跨域访问

Posted on 2013-09-26 13:51  奋斗ITan_yxing  阅读(94)  评论(0)    收藏  举报

第一种方法自己代理:

第一步:ajax提交
//成功案例1  在后台访问数据 拼json
            $.ajax({
                type: "get",
                async: false,
                timeout: 30000,
                url: "callbackparam.aspx",
                dataType: "jsonp",
                jsonp: "callbackparam",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
                jsonpCallback: "success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
                success: function (data) {  //data为返回json格式
                    alert(data.weatherinfo.city);
                }
            });

//第二步:后台处理

if (Request.QueryString["callbackparam"] != null && Request.QueryString["callbackparam"].ToString().Trim() != string.Empty)                 {                   string  callbackFunName = Request.QueryString["callbackparam"].ToString().Trim();

                  Uri myUri = new Uri("http://m.weather.com.cn/data/101050101.html");                   HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(myUri);                   myWebRequest.Method = "GET";                   HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();

                  StreamReader reader = new StreamReader(myWebResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));                   byte[] buffer = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(reader.ReadToEnd());                   string HTML = System.Text.Encoding.GetEncoding("UTF-8").GetString(buffer).Trim();

                  Response.Write(callbackFunName + "(" + HTML + ")");                   Response.End();                 }

ok,大功告成。

 

第二种方法:用代理。

//成功案例2  直接访问数据返回  但需要代理 url1=代理 url2=访问地址
            $.getJSON("http://query.yahooapis.com/v1/public/yql?callback=?", { q: "select * from json where url='http://www.weather.com.cn/data/sk/101010100.html'", format: "json" },
                function (data) {
                    alert(data.query.count);
                });
第一个url:http://query.yahooapis.com/v1/public/yql?callback=?是代理
第二个Url:'http://www.weather.com.cn/data/sk/101010100.html才是要访问的地址。