jsonp
json获取响应头方法,用于参考,与下面的jsonp无关: $.ajax({ type: 'HEAD',// 获取头信息,type=HEAD即可 url: "http://192.168.2.254/t.html",complete: function (xhr,data) { // 获取相关Http Response header var wpoInfo = { // 服务器端时间 "sessionID": xhr.getResponseHeader('Set-Cookie'),"date": xhr.getResponseHeader('Date'),// 如果开启了gzip,会返回这个东西 "contentEncoding": xhr.getResponseHeader('Content-Encoding'),// keep-alive ? close? "connection": xhr.getResponseHeader('Connection'),// 响应长度 "contentLength": xhr.getResponseHeader('Content-Length'),// 服务器类型,apache?lighttpd? "server": xhr.getResponseHeader('Server'),"vary": xhr.getResponseHeader('Vary'),"transferEncoding": xhr.getResponseHeader('Transfer-Encoding'),// text/html ? text/xml? "contentType": xhr.getResponseHeader('Content-Type'),"cacheControl": xhr.getResponseHeader('Cache-Control'),// 生命周期? "exprires": xhr.getResponseHeader('Exprires'),"lastModified": xhr.getResponseHeader('Last-Modified') }; console.log(wpoInfo); // 在这里,做想做的事。。。 } }); 响应过来的编码若与接收的不一致,需设置好渲染编码: $.ajaxSetup({ scriptCharset: 'utf-8' });
$.ajaxSetup({ ajaxSettings: { contentType: "application/x-www-form-urlencoded;chartset=gb2312" } }); $.getJSON("http://192.168.2.254/api/android?callback=?",{ "question": $('li.checked').map(function () { return $(this).text() }).get().join(','),"description": $('#area').val(),"contact": $('input').val(),"device": "android" },function (data) { window.android.Tip(JSON.stringify(data)); }); .net服务器jsonp配置(摘自 按MVC jsonp(实验过能用): http://www.25kx.com/art/1908976),先实现JsonMediaTypeFormatter类: using System; using System.IO; using System.Net.Http.Formatting; using System.Net.Http.Headers; using System.Threading.Tasks; using System.Web; public class JsonpMediaTypeFormatter : JsonMediaTypeFormatter { private string _callbackQueryParamter; public JsonpMediaTypeFormatter() { SupportedMediaTypes.Add(DefaultMediaType); SupportedMediaTypes.Add(new MediaTypeWithQualityHeaderValue("text/javascript")); MediaTypeMappings.Add(new UriPathExtensionMapping("jsonp",DefaultMediaType)); } public string CallbackQueryParameter { get { return _callbackQueryParamter ?? "callback"; } set { _callbackQueryParamter = value; } } public override System.Threading.Tasks.Task WriteToStreamAsync(Type type,object value,System.IO.Stream writeStream,System.Net.Http.HttpContent content,System.Net.TransportContext transportContext) { string callback; if (IsJsonpRequest(out callback)) { return Task.Factory.StartNew(() => { var writer = new StreamWriter(writeStream); writer.Write(callback + "("); writer.Flush(); base.WriteToStreamAsync(type,value,writeStream,content,transportContext).Wait(); writer.Write(")"); writer.Flush(); }); } return base.WriteToStreamAsync(type,transportContext); } private bool IsJsonpRequest(out string callback) { callback = null; switch (HttpContext.Current.Request.HttpMethod) { case "POST": callback = HttpContext.Current.Request.Form[CallbackQueryParameter]; break; default: callback = HttpContext.Current.Request.QueryString[CallbackQueryParameter]; break; } return !string.IsNullOrEmpty(callback); } } 在Global.asax的Application_Start()中注册: GlobalConfiguration.Configuration.Formatters.Insert(0,new JsonpMediaTypeFormatter()); //set webAPI request return json or jsonp for APP 在WebAPI里写后台程序代码: public class APPController : ApiController { private class Tip { public bool status { get; set; } public string content { get; set; } } Tip[] tip = new Tip[]{ new Tip {status = false,content = "服务器出错,请稍候重试!"},new Tip {status = true,content = "提交成功!"},}; // api/APP?question=1&description=1&contact=1&device=1 public HttpResponseMessage Get(string callback,string question,string description,string contact,string device) { try { return Request.CreateResponse(HttpStatusCode.OK,tip[1]); } catch { return Request.CreateResponse(HttpStatusCode.OK,tip[0]); } } // api/APP?APPuserName=1&APPpwd=1&APPdevice=1 public HttpResponseMessage Get(string APPuserName,string APPpwd,string APPdevice) { try { Conn db_conn = new Conn(); var rs = (from u in db_conn.userInfo.Where(a => a.loginName == APPuserName) join s in db_conn.company on u.userID equals s.userID into s from l in s.DefaultIfEmpty() select new{ userID = u.userID,loginName = u.loginName,pwd = u.password,status = u.status,company = l,}).FirstOrDefault(); if (rs == null) return Request.CreateResponse(HttpStatusCode.OK,new { status = false,content = "用户名不存在!" }); else if (rs.pwd == Encryption.EncryptString(APPpwd)){ LoginManager.Login(new string[] { rs.userID.ToString(),rs.loginName,rs.status,rs.company == null ? null : rs.company.companyID.ToString(),APPdevice,Regex.IsMatch(APPuserName,@"^1[3|4|5|8]d{9}$") ? APPuserName : null }); return Request.CreateResponse(HttpStatusCode.OK,new { status = true,content = Domain.vip }); }else return Request.CreateResponse(HttpStatusCode.OK,content = "密码错误!" }); }catch { return Request.CreateResponse(HttpStatusCode.OK,tip[0]); } } }
参考以下c# .net jsonp: webForm jsonp应用:http://www.52php.cn/article/p-vnvpxlju-zd.html webForm jsonp(启用cookie):http://www.aspzz.cn/article/28517.htm MVC3 jsonp: http://download.csdn.net/detail/zxhouyi010101/4885318 webAPI jsonp(需MVC .net4.5)应用:http://www.2cto.com/kf/201312/262552.html webAPI jsonp(需MVC 未试验)应用:http://weblog.west-wind.com/posts/2012/Apr/02/Creating-a-JSONP-Formatter-for-ASPNET-Web-API?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RickStrahl+(Rick+Strahl%27s+WebLog) MVC jsonp(实验过能用):http://www.25kx.com/art/1908976 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |