jsonp 跨域调用

102 篇文章 0 订阅
87 篇文章 0 订阅
出处: http://bbs.csdn.net/topics/390858756
WebService是我们自己的项目,ajax是别人调用,但是我需要给别人写个例子。
WebService是带参数的,我现在用ajax调用后总是error报错,报错内容是空的。我贴下代码

这是WebService的代码 
C# code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Services;
using  System.Web.Script.Services;
using  System.Web.Script.Serialization;
 
namespace  MeierbeiWebDtService
{
     /// <summary>
     /// WebService 的摘要说明
     /// </summary>
     [WebService(Namespace =  "http://tempuri.org/" )]
     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
     [System.ComponentModel.ToolboxItem( false )]
     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
     [System.Web.Script.Services.ScriptService]
     public  class  WebService : System.Web.Services.WebService
     {
         [WebMethod]
         [ScriptMethod(UseHttpGet =  true , ResponseFormat = ResponseFormat.Json)]
         public  string  HelloWorld()
         {
             JavaScriptSerializer js =  new  JavaScriptSerializer();
             Context.Response.Clear();
             Context.Response.ContentType =  "application/json" ;
             Models.HelloWorldData data =  new  Models.HelloWorldData();
             data.Message =  "HelloWorld" ;
             data.Name =  "MicJackson" ;
             return  js.Serialize(data);
         }
 
         [WebMethod]
         [ScriptMethod(UseHttpGet =  false , ResponseFormat = ResponseFormat.Json)]
         public  void  GetClass( int  fenshu)
         {
             JavaScriptSerializer js =  new  JavaScriptSerializer();
             Context.Response.Clear();
             Context.Response.ContentType =  "application/json" ;
             Models.HelloWorldData data =  new  Models.HelloWorldData();
             if  (fenshu > 90)
             {
                 data.Message =  "优异" ;
                 data.Name =  "语文" ;
             }
             else  if  (fenshu > 80)
             {
                 data.Message =  "良好" ;
                 data.Name =  "语文" ;
             }
             else  if  (fenshu > 60)
             {
                 data.Message =  "及格" ;
                 data.Name =  "语文" ;
             }
             else
             {
                 data.Message =  "不及格" ;
                 data.Name =  "语文" ;
             }
             Context.Response.Write(js.Serialize(data));
             Context.Response.End();
             //return js.Serialize(data);
         }
     }
 
 
}

这是我写的html代码  
XML/HTML code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
< html >
< head >
     < script  src = "jquery-1.11.1.min.js"  type = "text/javascript" ></ script >
</ head >
< body >
     < script  type = "text/javascript" >
         $(document).ready(function(){
             $.ajax({
                 url: "http://localhost:53568/WebService.asmx/GetClass",
                 type: "GET",
                 dataType: "json",
                 data: {fenshu: 23},
                 success: function(json) {  
                     alert("success:"+json);  
                 },  
                 error: function(x, e) {  
                     alert("error:"+x.responseText);  
                 },  
                 complete: function(x) {  
                     alert("complete:"+x.responseText);  
                 }  
             }); 
 
             $.ajax({
                 url: "http://localhost:53568/WebService.asmx/HelloWorld",
                 type: "GET",
                 dataType: "json",
                 success: function(json) {  
                     alert("success:"+json);  
                 },  
                 error: function(x, e) {  
                     alert("error:"+x.responseText);  
                 },  
                 complete: function(x) {  
                     alert("complete:"+x.responseText);  
                 }  
             });             
         });
     </ script >
</ body >
</ html >

求助,哪里有问题,为什么得不到WebService返回的json数据啊?还有就是如果我想传参,有什么好点的办法吗?谢谢

额,自己解决了,是因为我的html页面不在同一个域里,没跨域,现在加上jsonp就没问题了
C# code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.Services;
using  System.Web.Script.Services;
using  System.Web.Script.Serialization;
 
namespace  MeierbeiWebDtService
{
     /// <summary>
     /// WebService 的摘要说明
     /// </summary>
     [WebService(Namespace =  "http://tempuri.org/" )]
     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
     [System.ComponentModel.ToolboxItem( false )]
     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
     [System.Web.Script.Services.ScriptService]
     public  class  WebService : System.Web.Services.WebService
     {
         [WebMethod]
         [ScriptMethod(UseHttpGet =  true , ResponseFormat = ResponseFormat.Json)]
         public  string  HelloWorld()
         {
             JavaScriptSerializer js =  new  JavaScriptSerializer();
             Context.Response.Clear();
             Context.Response.ContentType =  "application/json" ;
             Models.HelloWorldData data =  new  Models.HelloWorldData();
             data.Message =  "HelloWorld" ;
             data.Name =  "MicJackson" ;
             return  js.Serialize(data);
         }
 
         [WebMethod]
         [ScriptMethod(UseHttpGet =  false , ResponseFormat = ResponseFormat.Json)]
         public  void  GetClass( int  fenshu)
         {
             JavaScriptSerializer js =  new  JavaScriptSerializer();
             Context.Response.Clear();
             Context.Response.ContentType =  "application/json" ;
             Models.HelloWorldData data =  new  Models.HelloWorldData();
             if  (fenshu > 90)
             {
                 data.Message =  "优异" ;
                 data.Name =  "语文" ;
             }
             else  if  (fenshu > 80)
             {
                 data.Message =  "良好" ;
                 data.Name =  "语文" ;
             }
             else  if  (fenshu > 60)
             {
                 data.Message =  "及格" ;
                 data.Name =  "语文" ;
             }
             else
             {
                 data.Message =  "不及格" ;
                 data.Name =  "语文" ;
             }
             HttpRequest Request = HttpContext.Current.Request;
             string  callback = Request[ "jsonp" ];
             Context.Response.Write(callback +  "("  + js.Serialize(data) +  ")" );
             Context.Response.End();
             //return js.Serialize(data);
         }
     }
 
 
}


XML/HTML code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
< html >
< head >
     < script  src = "jquery-1.11.1.min.js"  type = "text/javascript" ></ script >
</ head >
< body >
     < script  type = "text/javascript" >
         function callbackjsp(result){
             alert("Message:"+result.Message + ",Name:"+result.Name);
         }
         $(document).ready(function(){
             $.ajax({
                 url: "http://localhost:53568/WebService.asmx/GetClass",
                 type: "GET",
                 dataType: "jsonp",
                 jsonp: "jsonp", //传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
                 jsonpCallback: "callbackjsp", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
                 data: { fenshu: 93 },
                 success: function (json) {
                     alert("success:" + json.Message);
                 },
                 error: function (x, e) {
                     //alert("error:" + x.responseText);
                 },
                 complete: function (x) {
                     //alert("complete:" + x.responseText);
                 }
             });       
         });
     </ script >
</ body >
</ html >


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值