ajax跨域调用c# webserver 返回json数据问题

发布于 2021-11-17 22:20:19 字数 2250 浏览 807 评论 8

站点A  c# webserver 代码

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json,XmlSerializeString = false)]
        public void Login(string userName, string userPwd, string macAddress)
        {
            var response = HttpContext.Current.Response;
            response.ContentType = "text/json";  

            var ws = ValitateLogin(userName, userPwd, macAddress);
            var json = new JSONHelper {success = true};
            json.AddItem("UnReadEmailNum", ws.UnReadEmailNum.ToString());
            json.AddItem("IsValid", ws.IsValid.ToString());
            json.AddItem("RetString", ws.RetString);
            json.AddItem("EmailUrl",ws.EmailUrl);
            json.ItemOk();
            response.Write(json.ToString());  

        }

站点B ajax 跨域调用代码

  $(function () {
            $("#jsonp_btn").click(function () {
				
		$.ajax({    
			 async:false,    
			 url: 'http://192.168.1.2:14671/OA/Email.asmx/Login',  // 跨域URL   
			 type: 'GET',    
			 dataType: 'jsonp',   
			contentType: "application/json; charset=utf-8", 
			jsonp: 'jsoncallback', //默认callback  
			data: {"userName":"admin","userPwd":"123456","macAddress":""}, //请求数据   
			timeout: 5000,    
			beforeSend: function(){  
						//jsonp 方式此方法不被触发。原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了   
					},   
					success: function(json) { 
						//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
						alert(json.respond);    
						if(json.actionErrors.length!=0)
						{    
							alert(json.actionErrors);    
						}    
					},    
					complete: function(XMLHttpRequest, textStatus){    
							     alert(textStatus);
					},    
					error: function(xhr){    
						   //jsonp 方式此方法不被触发   
						   //请求出错处理    
						alert("请求出错(请检查相关度网络状况.)");    
					}    
				});
		
            });
        });
IE浏览器报:缺少":" 谷歌浏览器报:Uncaught SyntaxError: Unexpected token :

调式查看返回数据为 :

{"UnReadEmailNum":"5","IsValid":"1","RetString":"登录成功",

"EmailUrl":"http://localhost:14671/OA/login.aspx?id=2"}

我想知道为什么会报错。

感谢各大侠百忙中浏览小弟的提问 谢谢了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

月亮是我掰弯的 2021-11-19 05:07:16
修改后正确答案 代码片段       
 [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false, UseHttpGet = true)]
        public void Login(string userName, string userPwd, string macAddress)
        {
            var response = HttpContext.Current.Response;
            var context = HttpContext.Current.Request;
          
            response.Clear(); //清空无关信息
            response.Buffer = true; //完成整个响应后再发送
            response.Charset = "GB2312";//设置输出流的字符集-中文
            response.AppendHeader("Content-Disposition", "attachment;filename=Report.doc");//追加头信息
            response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流的字符集
            response.ContentType = "text/json";
          
            //获取回调函数名
            string callback = context.QueryString["callback"];
            var jsons = "[{"taskId": "100","projectName": "张三" }]";
            response.Write(callback + "(" + jsons + ")");
            response.End();
   
        }
        $(function () {
            $("#jsonp_btn").click(function () {
				$.ajax({    
					async:false,    
					url: 'http://localhost:82/Email.asmx/Login',  // 跨域URL   
					dataType: 'jsonp',   
					jsonpCallback: 'persons', //默认callback  
					data: {"userName":"admin","userPwd":"etimes2011@","macAddress":""}, //请求数据   
					timeout: 5000,    
					beforeSend: function(){  
						//jsonp 方式此方法不被触发。原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了   
					},   
					success:function(data) { 
						//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
							alert("success  "+data[0].projectName);
						   
					},    
					complete: function(XMLHttpRequest, textStatus){    
							    
					},    
					error: function(xhr){    
						   //jsonp 方式此方法不被触发   
						   //请求出错处理    
						alert("请求出错(请检查相关度网络状况.)");    
					}    
				});
		
            });
        });
天涯离梦残月幽梦 2021-11-19 04:48:37

没有说哪一行,只是说缺少分号

清欢 2021-11-19 04:45:57

看看哪一行报错就OK了

巡山小妖精 2021-11-19 03:09:09

提示说返回结果少分号。 我检查了 返回结果是标准的json格式

猫烠⑼条掵仅有一顆心 2021-11-18 22:24:19

这是语法问题,chrome浏览器应该很容易看出来的

酷到爆炸 2021-11-18 19:54:21

恩,谢谢了 我先看看,忽然在咨询你,

晚风撩人 2021-11-18 15:54:35

谢谢 这位大侠 加个回调就OK 了 感谢你的提醒 和帮助。谷歌的时候看到有类似的说明,忽视了 真是细节注定成败 谢谢你了

德意的啸 2021-11-18 09:06:12

跨域的jsonp 需要有callback 声明

http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文