asp.net :使用jquery 的ajax +WebService+json 实现无刷新去后台值

本文深入解析了使用jQuery AJAX处理JSON数据时遇到的问题,包括如何正确调用Web服务页面的方法,以及在AJAX请求中设置正确参数以获取JSON数据。重点讨论了在Web服务中返回JSON数据的格式和在客户端如何正确解析JSON数据,同时解决了在调用Web服务时遇到的关键问题。此外,文章还提供了解决JSON数据解析问题的解决方案,包括使用eval()方法和设置AJAX请求的dataType属性。

======================================================
注:本文源代码点此下载
======================================================

首先贴上jquery的ajax:

$.ajax({

url: 'ws_ajax.asmx/binddictbyupper',

type: 'post',

contenttype: 'application/json;charset=utf-8',

datatype: 'json',

data: '{ ppareid:"' + varlue + '"}',

success: function (data) {

var dataobj = eval("(" + data + ")");

//$('#mylist').html('');

//for (var i = 0; i //$('#mylist').append('

' + msg.d[i] + '');

// }

alert(dataobj);

$.each({ name: "john", lang: "js" }, function (i, n) {

alert("name: " + i + ", value: " + n);

});

$.each(dataobj, function (idx, item) {

if (idx == 0) {

return true; //同countinue,返回false同break

}

alert("name:" + item['name'] + ",value:" + item['value']);

});

},

//data: '{query:"' + $('#editquery').val() + '"}',

processdata: false

});

好,前台写好,建一个webservice页,写上方法:

///

/// datatable转换为json

///

///

datatable对象

/// json字符串

//然后在webservice中需要返回json数据的方法加上如下属性

[scriptmethod(responseformat=responseformat.json)]

public static string tojson(datatable adt)

{

stringbuilder jsonstring = new stringbuilder();

jsonstring.append("[");

foreach (datarow pdr in adt.rows)

{

jsonstring.append("{");

jsonstring.appendformat("name:\"{0}\",value:\"{1}\"", pdr["字典内容"].tostring(), pdr["序号"].tostring());

jsonstring.append("},");

// jsonstring.appendformat("{name:'{0}',value:'{1}'},", pdr["字典内容"].tostring(), pdr["序号"].tostring());

}

jsonstring.remove(jsonstring.length - 1, 1);

jsonstring.append("]");

return jsonstring.tostring();

}

scriptmethod在 using system.web.script.services 命名空间下,这里还可以设置是否使用 get方式来调用 usehttpget=true

然后尝试着运行,这是出问题列,无论怎样运行都不能调到后台方法:

最后在网上查列好久

才发现在新建的webservice页少了一句关键的话:

// 若要允许使用 asp.net ajax 从脚本中调用此 web 服务,请取消对下行的注释。

[system.web.script.services.scriptservice]

在类前面加上这句话就可以了

加上以后再运行,好,可以调到后台了

后台的数据也发送到前台

但又出现问题列,发过来的数据不能以解析出来json数据

按网上说的,只要把ajax中的datatype设置为json就行了,但是实际上不行,然后在网上查了下:

1、对于服务器返回的json字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次

2.对于服务器返回的json字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getjson()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getjson方法为例说明数据处理方法

但是我把他的datatype设置为json,应该直接可以用le?

于是我把传回来的数据放在eval()方法里面处理了下,再调用就可以le?

这样前台调出来的数据就可以直接按你需要的方式处理了。

我这里还又一个疑问:

我用这种方式取数为什么查不出来数据(我对json不是很熟,第一次用):

$.each(data.root,function(idx,item){

if(idx==0){

return true;//同countinue,返回false同break

}

alert("name:"+item.name+",value:"+item.value);

});

});

网上看的这样方式页可以调用json数据,知道的给解答下……


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值