大家好,欢迎来到IT知识分享网。
在日常工作中(主要使用ASP.net),我需要编写很多JavaScript代码。我做的最重复的任务之一是jQuery Ajax调用。你看:
$.ajax({
type: "POST",
url: "MyPage.aspx/MyWebMethod",
data: "{parameter:value,parameter:value}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
//function called successfull
},
error: function(msg) {
//some error happened
}
});
我不知道对您来说是否相同,但是对我来说用这种语法编写调用太麻烦了。而且,以前必须按照已知规则使用参数构建字符串以传递给WebMethod:字符串必须用引号传递,数字不能传递,等等。
因此,我决定创建一个小而有用的JavaScript类来帮助我有了这个特定的问题,现在我已经完成了jQuery Ajax调用,这对我来说非常友好。
在类构造函数中,我传递页面名称,方法名称以及成功和错误函数。以后,我会根据需要对addParam方法进行尽可能多的调用。最后,我调用run方法进行Ajax调用。成功函数和错误函数必须分别编写。
参数根据其类型进行处理。如果参数是字符串,则使用引号。如果是数字,我不会。日期参数是一种特殊情况。在这种情况下,我使用JavaScript日期对象的getTime()函数,该函数给了我自1970年1月1日以来的日期的毫秒数。后来,我将该值转换为UTC时间,这样我得到了一个最终的毫秒数,即我可以将Int64值传递给我的VB.net(或C#)代码,用它来重建.Net中的日期值。
这是我的jAjax类的完整列表(末尾带有日期帮助器功能):
function jAjax(pageName, methodName, successFunc, errorFunc) {
//stores the page name
this.pageName = pageName;
//stores the method name
this.methodName = methodName;
//stores the success function
this.successFunc = successFunc;
//stores the error function
this.errorFunc = errorFunc;
//initializes the parameter names array
this.paramNames = new Array();
//initializes the parameter values array
this.paramValues = new Array();
//method for add a new parameter (simply pushes to the names and values arrays)
this.addParam = function(name, value) {
this.paramNames.push(name);
this.paramValues.push(value);
}
//method to run the jQuery ajax request
this.run = function() {
//initializes the parameter data string
var dataStr = '{';
//iterate thru the parameters arrays to compose the parameter data string
for (var k = 0; k < this.paramNames.length; k++) {
//append the parameter name
dataStr += this.paramNames[k] + ':';
if (typeof this.paramValues[k] == 'string') {
//string parameter, append between quotes
dataStr += '"' + this.paramValues[k] + '",';
} else if (typeof this.paramValues[k] == 'number') {
//number parameter, append "as-is" calling toString()
dataStr += this.paramValues[k].toString() + ',';
} else if (typeof this.paramValues[k] == 'object') {
if (this.paramValues[k].getTime != undefined) {
//date value
//call to my getUtcTime function to get the number of
//milliseconds (since january 1, 1970) in UTC format
//and append as a number
dataStr += getUtcTime(this.paramValues[k]).toString() + ',';
} else {
//object value
//because I don't know what's this, append the toString()
//output
dataStr += '"' + this.paramValues[k].toString() + '",';
}
}
}
//if some parameter added, remove the trailing ","
if (dataStr.length > 1) dataStr = dataStr.substr(0, dataStr.length - 1);
//close the parameter data string
dataStr += '}';
//do the jQuery ajax call, using the parameter data string
//and the success and error functions
$.ajax({
type: "POST",
url: this.pageName + "/" + this.methodName,
data: dataStr,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
successFunc(msg);
},
error: function(msg) {
errorFunc(msg);
}
});
}
}
function getUtcTime(dateValue) {
//get the number of milliseconds since january 1, 1970
var time = dateValue.getTime();
//get the UTC time offset in minutes. if you created your date with
//new Date(), maybe this contains a value. but if you compose the date
//by yourself (i.e. var myDate = new Date(1984,5,21,12,53,11)) this will
//be zero
var minutes = dateValue.getTimezoneOffset() * -1;
//get the milliseconds value
var ms = minutes * 60000;
//add to the original milliseconds value so we get the GMT exact value
return time + ms;
}
这是使用的语法:
var ajaxCall = new jAjax('MyPage.aspx','MyWebMethod',successFunc,errorFunc);
ajaxCall.addParam('s','this is a string');
ajaxCall.addParam('n',34);
ajaxCall.addParam('d',new Date());
ajaxCall.run();
function successFunc(msg) {
...
}
function errorFunc(msg) {
}
另外一个好处是,您可以将成功和错误功能重新用于几个ajax调用。
希望对您有帮助!!随时在您的应用程序中使用jAjax类。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/55657.html