JSON

jquery请求格式和返回类型 汇总

字号+ 作者:H5之家 来源:H5之家 2017-02-01 13:01 我要评论( )

jquery请求格式和返回类型 汇总,常规请求基本格式1 [WebMethod]2 public string SayHello(string name)3 {4 return Hello + name;5 }2 &

正文

常规请求基本格式 1 [WebMethod] SayHello(string name) 3 { + name; 5 } 2 </script>

也会顺利弹窗

随意改变里给funccallback传递的参数,就是说scirpt1中的funccallback接受到了其他源下的动态数据

$.ajax()就是对这种请求形式进行了封装,向其他源的服务器发送一个GET请求,返回一个指定格式的数据

这种格式就是JSONP格式:回调函数名(json格式的动态数据)

2、请求ashx 1      public void ProcessRequest(HttpContext context) 2 { ]; ]; + name + + + ; 6 //JSONP格式:回调函数名(json格式参数) result = callback + + json + ; ; 10 context.Response.Write(result); 11 } funccallback(data) { 3 alert("in callback" + ":" + data.name + ", 性别" + data.gender); 4 } 5 6 $.ajax({ 7 url: "http://localhost:12500/handler1.ashx?callback=?", 8 dataType: "jsonp", 11 data: { name: "Varchar32" }, success: function (data) { alert("in success" + ":" + data.name + ", 性别" + data.gender); 16 } 17 });

脚本执行结果为浏览器弹出确认框:‘in success:Varchar32, 性别男’

firefox浏览器中看到的响应

  

3、请求webservice 1 [WebMethod] GetGenderByName(string callback, string name) 3 { + name + + + ; + json + ; ; 7 HttpContext.Current.Response.Write(result); 8 HttpContext.Current.Response.End(); 9 } funccallback(data) { 3 alert("in callback" + ":" + data.name + ", 性别" + data.gender); 4 } 5 6 $.ajax({ 7 url: "http://localhost:12500/CommonService.asmx/GetGenderByName?callback=?", 8 dataType: "jsonp", data: { name: "Varchar32" }, 11 success: function (data) { 12 alert("in success" + ":" + data.name + ", 性别" + data.gender); 13 } 14 }); 4、$.getJSON 1 $.getJSON("http://localhost:12500/CommonService.asmx/GetGenderByName?name=Varchar32&callback=?", 2 function (data) { 3 alert("in success" + ":" + data.name + ", 性别" + data.gender); 4 } 5 );     public void ProcessRequest(HttpContext context) 2 { ]; ]; person = new Person() 7 { 8 Name = name, 9 Gender = true 10 }; 11 12 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person)); 13 MemoryStream ms = new MemoryStream(); 14 ser.WriteObject(ms, person); 15 string jsonString = Encoding.UTF8.GetString(ms.ToArray()); 16 ms.Close(); json = jsonString; JSONP格式:回调函数名(json格式参数) result = callback + + json + ; ; 24 context.Response.Write(result); 25 } 常见问题

1、webservice定义了几个方同名的法时,ajax请求会被同名方法中的最后一个响应,而不是根据参数自动匹配

2、Method use ‘Get’,返回xml or text,要在Web.config中添加节点

  <webServices>

3Method use ‘Get’,返回json,要给Webservice的方法添加UseHttpGet特性

[ScriptMethod(UseHttpGet=true)]

4、dataType并不是服务器返回数据的类型(格式),just expecting。看下面的几种请求方式

  第一种:一般方式

1 $.ajax({ 2 url: "/CommonService.asmx/SayHello", 3 type: "Post", 4 dataType: "json", 5 contentType: "application/json; charset=utf-8", 6 data: "{ name: 'Varchar32' }", 7 success: function (data) { 8 alert(data.d); 9 }, 10 error: function (data) { 11 alert(data); 12 } 13 });

  结果弹出确认框‘Hello Varchar32’,从firefox看到的结果

  

  

  第二种:省略dataType项,代码略,结果和第一种一样,弹出确认框‘Hello Varchar32’

  第三种:给dataType指定为‘text’,代码略,弹出确认框‘undefined’,但返回结果从firefox看和上面两种第二种请求格式一样

  第四种:给dataType指定为‘xml’,代码略,结果执行了error方法,但返回结果从firefox看和以上几种方式一样(200的响应被认定为了error)

  为什么第二种情况不会报错,第三种明明返回了json格式,但data.d为什么是undefined呢,而第四种请求会被认定为error

  1)认真从firefxo中观察请求头和响应头会发现,响应头的content-Type始终是‘application/json; charset=utf-8’

  

  2)请求头的Accept项有所不同,分别是

    常规格式:

    省略dataType项:

    给dataType指定为‘text’:

    给dataType指定为‘xml’

  3)从jquery官网上找到$.ajax()的选项content-Type定义中的这么一句

    If you explicitly pass in a content-type to$.ajax(), then it is always sent to the server (even if no data is sent)

    意思差不多就是:如果指定了‘content-Type’,不管有没有数据,始终发送到服务器

    如果仅仅是提交的数据的类型(格式),为什么没数据还要发送到服务器呢

  4)修改success方法

1 success: function (data) { alert(data.d); 4 },

    结果分别是:object、object、string、不执行success

    结论:(假设成功返回,状态码200)

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • TurboGears JSON渲染

    TurboGears JSON渲染

    2017-01-28 13:01

  • jquery处理json数据返回数组和输出的方法

    jquery处理json数据返回数组和输出的方法

    2017-01-28 11:04

  • Jquery - jquery 循环输出json数据实例

    Jquery - jquery 循环输出json数据实例

    2017-01-26 09:00

  • 2.8.3 解析JSON和XML:jQuery.parseJSON( data )、jQuery.parseX

    2.8.3 解析JSON和XML:jQuery.parseJSON( data )、jQuery.parseX

    2017-01-22 14:04

网友点评