ASP.net jQuery调用webservice返回json数据的一些问题
之前寒假时,试着使用jQuery写了几个异步请求demo,
但是那样是使用的webform普通页面,一般应该是用 webservice 居多。
最近写后台管理时,想用异步来实现一些信息的展示和修改,
这是第一次真正的在实际中运用ajax,卡了一个小时才做好简单的信息展示。
在这之间遇到了两个问题。写下来分享给大家,也加深一下自己的印象。
有错误的地方还请大神指出。
前端js代码:
<script type="text/javascript">
$(function () {
$("#details").hide();
$(".details").click(function () {
showdetails($(this).attr("id"));
});
}) function showdetails(id) {
$.ajax({
url: "article.asmx/GetArticleByID",
type: "POST",
datatype: "json",
data:'{ id: ' + id + ' }',
contentType: "application/json; charset=utf-8",
success: function (data) {
var json = null;
try {
json = eval('(' + data.d + ')');
}
catch (e) {
alert(e.message);
}
$("#id").text(json.ID);
$("#title").text(json.Title);
$("#time").text(json.Time);
$("#text").text(json.Text);
$("#details").show();
}
});
</script>
前端html代码
//点击的地方
<td><a class="details" id="<% =Convert.ToInt32(article.ID) %>">详细</a></td> //插入信息的地方
<div id="details">
<table>
<tr>
<td id="id"></td>
<td id="title"></td>
<td id="time"></td>
<td id="text"></td>
</tr>
</table>
</div>
webservice 代码
[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 article : System.Web.Services.WebService
{ [WebMethod]
public string GetArticleByID(int id)
{
ArticleBLL article = new ArticleBLL();
article = ArticleBLL.GetArticleByID(id); //string s = string.Empty;
//s = "{\"id\":\""+article.ID+"\",\"title\":\""+article.Title+"\",\"text\":\""+article.Text+"\",\"time\":\""+article.Time+"\"}";
//return s; JavaScriptSerializer js = new JavaScriptSerializer();
return js.Serialize(article); //Context.Response.Write(s);
//Context.Response.End();
}
}
遇到的第一个问题是,传递信息时的500报错,发现是data格式的问题,
加上contentType: "application/json; charset=utf-8"才会报的错,
这个语句告诉服务器我们传递过去的是json格式信息,所以解析不了的时候就会返回错误信息。
data要写成
data: '{ id: ' + id + ' }'
data 必须是一个“表示JSON对象的字符串”,而不是一个“JSON”对象
原因是jquery会把JSON对象序列化成标准POST的形式,你此处的{ id: id }会变成形好id=3这样的形式,而ASP.NET WebService需要的是JSON格式的数据,所以必须把你的数据变成一个JSON样子的字符串。
第二个问题是请求成功看返回数据格式也对,但是显示不出来。
默认返回的数据是xml格式,这里我使用了 JavaScriptSerializer js = new JavaScriptSerializer(); return js.Serialize(article); 来返回json格式信息。
最后被注释掉的代码是在网上看到的,是输出纯文本,可以被浏览器识别,但我没有测试,应该是可以的。
原来是需要解析一下,这个过程叫做反序列化。
我们只需要在 success 回调函数中 eval 下 jquery 通过获取 webservice 得到的返回字符串的 d 属性,就可以获取到实际的json对象了。
如下,如果方法返回的是 {"d":"{\"Title\":\"文章标题\"}"} 这种信息,我们如何获取到msg这个属性的值呢?
首先一定要明确的时,调用webservice的方法后实际获取到的json格式的字符串是这样的 {"d":"{\"Title\":\"文章标题\"}"} ,
jquery通过这个字符串生成的json对象只有一个属性,那就是d,d存储的是webservice方法返回的json格式的字符串信息,而不是 json 对象,
所以不能通过 data.d.ID来获取ID信息。而是需要 var json=eval('('+data.d+')')来生成实际的json对象,然后 josn.ID 才是需要的信息。
其实还可以直接解析xml数据,但要比json麻烦一点
http://www.cnblogs.com/qiantuwuliang/archive/2009/11/23/1609117.html
这篇文章就写了如何解析xml数据。
参考 http://www.cnblogs.com/tianguook/archive/2010/12/04/1896485.html
转载请保留出处。
ASP.net jQuery调用webservice返回json数据的一些问题的更多相关文章
- jQuery调用WebService返回JSON数据
相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. ...
- Jquery调用Webservice传递Json数组
Jquery由于提供的$.ajax强大方法,使得其调用webservice实现异步变得简单起来,可以在页面上传递Json字符串到Webservice中,Webservice方法进行业务处理后,返回Js ...
- C#调用接口返回json数据中含有双引号 或其他非法字符的解决办法
这几天,调用别人接口返回json数据含有特殊符号(双引号),当转换成json对象总是报错, json字符格式如下 { "BOXINFO":[ { ", "ITE ...
- Asp.Net_Ajax调用WebService返回Json前台获取循环解析
利用JQuery的$.ajax()可以很方便的调用 asp.net的后台方法.但往往从后台返回的json字符串不能够正确解析,究其原因,是因为没有对返回的json数据做进一步的加工.其实,这里只需 要 ...
- jquery实现ajax,返回json数据
jquery实现ajax可以调用几种方法 我经常用的是$get(url,data,callback,type)方法 其中url是异步请求的页面(可以是.ashx文件),data是参数,callback ...
- 亲测 asp.net 调用 webservice返回json
前端脚本 $("#sure").click(function () { var tbody = $("#putsigal tbody"); var trs = ...
- asp.net webservice 返回json数据乱码解决方法
[WebMethod] public void QueryRiskNotice(string phone) { try { var data = _riskNoticeDal.QueryRiskNot ...
- jquery 调用ajax返回json
ie调用可以,火狐和chrome皆失败,找了半天原因. 被屏蔽了. 火狐和chrome 对同一个域名不同端口的调用也严格限制,不给调用.只能用jsonp. 查看网络的返回状态,错误信息,F12 很重要 ...
- [转]jQuery调用ASPX返回json
本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX ...
随机推荐
- D - Doing Homework HDU - 1074 (状压dp)
题目链接:https://cn.vjudge.net/contest/68966#problem/D 具体思路:我们可以把每个情况都枚举出来,然后用递归的形式求出最终的情况. 比如说 我们要求 10 ...
- SQL 注入,永不过时的黑客技术
SQL 注入,永不过时的黑客技术 TalkTalk的信息泄漏事件导致约15万人的敏感信息被暴露,涉嫌造成这一事件的其中一名黑客使用的并不是很新的技术.事实上,该技术的「年纪」比这名15岁黑客还要大两岁 ...
- java所搜引擎slor学习笔记(一)
java搜索引擎有很多,比较熟悉的就是slor和lucene. luncene: 概念:全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置.当用户查 ...
- 连接数据库及出现System.AccessViolationException错误的解决方法
调试后发现, connection.Open();以后报错,System.AccessViolationException: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏,网上搜了很多都没有作 ...
- 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)
使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...
- 使用纯注解与配置类开发springMVC项目,去掉xml配置
最近拜读了杨开振老师的书,深入浅出springBoot2.x,挖掘了很多以前被忽略的知识, 开发一年多,工作中一直用传统springmvc的开发,基本都还是用的传统的xml配置开发, 看到书里有提到, ...
- Percona XtraBackup 实现全备&增量备份与恢复【转】
percona-xtrabackup主要是有两个工具,其中一个是xtrabackup,一个是innobackupex,后者是前者封装后的一个脚本.在针对MySQL的物理备份工具中,大概是最流行也是最强 ...
- 数据库——mysql如何获取当前时间
1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() curren ...
- Java数据类型以及变量的定义
1130136248 Java的基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类 ...
- 激活Win10内置版Linux (ubuntu)
微软自从14316版本后,就开始原生支持Linux Bash命令行. 1.首先到系统设置——更新和安全——针对开发人员——选择开发者模式. 2.控制面板→程序和功能→启用或关闭Windows功能,勾 ...