使用Jquery调用Asp.net生成的webservice
厌倦了very very不爽的ms ajax.net类库,终于决定要使用jquery把它替换掉。
Jquery的好处,就不用说了,简单,方便,人见人爱,车见车载啊… …
ms ajax调用的方式一般为
[c#]
Service.方法名(参数,结果处理函数,失败处理函数,其他参数);
[/c#]
使用firebug监控,发现
提交方式为: post
调用地址为:/Service/Service.asmx/方法名 如 /Service/Service.asmx/GetSample
其参数格式如下
‘{name:value,name1:value1,…}’
也就是说是javascript object 的json字符串格式
Content-Type=application/json; charset=utf-8
这样,我们就可以用jquery来模拟ms ajax的调用过程了
首先设置Ajax环境
JavaScript:
-
// write by <a href=”http://www.chyni.cn” class=”alinks_links” onclick=”return alinks_click(this);” title=”" style=”padding-right: 13px; background: url(http://www.chyni.cn/wp-content/plugins/alinks/images/external.png) center right no-repeat;” rel=”external”>chyni</a>
-
$(document).ready(function() {
-
-
$.ajaxSetup( {
-
url: “/Service/Service.asmx/”,
-
global: false,
-
dataType:“json”,
-
contentType:‘application/json; charset=utf-8′,
-
type: “POST”
-
} );
-
}
其次,因为jquery没有直接提供postJSON方法,于是自己实现了一个$.postJSON()方法
其中使用了json.js插件,该插件地址国内无法访问,摘录代码如下
JavaScript:
-
//json.js
-
//modified by chyni
-
(function ($) {
-
var m = {
-
‘\b‘: ‘\\b’,
-
‘\t‘: ‘\\t’,
-
‘\n‘: ‘\\n’,
-
‘\f‘: ‘\\f’,
-
‘\r‘: ‘\\r’,
-
‘”‘ : ‘\\“‘,
-
‘\\‘: ‘\\\\‘
-
},
-
s = {
-
‘array’: function (x) {
-
var a = [‘[’], b, f, i, l = x.length, v;
-
for (i = 0; i <l; i += 1) {
-
v = x[i];
-
f = s[typeof v];
-
if (f) {
-
v = f(v);
-
if (typeof v == ’string’) {
-
if (b) {
-
a[a.length] = ‘,’;
-
}
-
a[a.length] = v;
-
b = true;
-
}
-
}
-
}
-
a[a.length] = ‘]’;
-
return a.join(”);
-
},
-
‘boolean’: function (x) {
-
return String(x);
-
},
-
‘null’: function (x) {
-
return “null”;
-
},
-
‘number’: function (x) {
-
return isFinite(x) ? String(x) : ‘null’;
-
},
-
‘object’: function (x) {
-
if (x) {
-
if (x instanceof Array) {
-
return s.array(x);
-
}
-
var a = [‘{’], b, f, i, v;
-
for (i in x) {
-
v = x[i];
-
f = s[typeof v];
-
if (f) {
-
v = f(v);
-
if (typeof v == ’string’) {
-
if (b) {
-
a[a.length] = ‘,’;
-
}
-
a.push(s.string(i), ‘:’, v);
-
b = true;
-
}
-
}
-
}
-
a[a.length] = ‘}’;
-
return a.join(”);
-
}
-
return ‘null’;
-
},
-
’string’: function (x) {
-
if (/[“\\\x00-\x1f]/.test(x)) {
-
x = x.replace(/([\x00-\x1f\\“])/g, function(a, b) {
-
var c = m[b];
-
if (c) {
-
return c;
-
}
-
c = b.charCodeAt();
-
return ‘\\u00′ +
-
Math.floor(c / 16).toString(16) +
-
(c % 16).toString(16);
-
});
-
}
-
return ‘”‘ + x + ‘”‘;
-
}
-
};
-
-
$.toJSON = function(v) {
-
var f = isNaN(v) ? s[typeof v] : s[‘number’];
-
if (f) return f(v);
-
};
-
-
$.parseJSON = function(v, safe) {
-
if (safe === undefined) safe = $.parseJSON.safe;
-
if (safe && !/^(“(\\.|[^”\\\n\r])*?“|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
-
return undefined;
-
return eval(’('+v+’)');
-
};
-
-
$.parseJSON.safe = false;
-
})(jQuery);
-
$.postJOSN=function(url, data, callback )
-
{ return $.post(url, $.toJSON(data),function(ret){callback($.parseJSON(ret,true)); });
-
}
这样,我们就可以如下方便的调用asp.net 的 webservice了
$.postJOSN(’/Service/Service.asmx/GetSample’,
{”msg”:’我爱追风‘},
function(data){GetSampleResult(data,itype);}
);
再也不用忍受臃肿的Microsoft AJAX Framework了,这下天下太平了。




