ajax跨域调用c# webserver 返回json数据问题
站点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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
没有说哪一行,只是说缺少分号
看看哪一行报错就OK了
提示说返回结果少分号。 我检查了 返回结果是标准的json格式
这是语法问题,chrome浏览器应该很容易看出来的
恩,谢谢了 我先看看,忽然在咨询你,
谢谢 这位大侠 加个回调就OK 了 感谢你的提醒 和帮助。谷歌的时候看到有类似的说明,忽视了 真是细节注定成败 谢谢你了
跨域的jsonp 需要有callback 声明
http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html