関数内で、そのパラメーターの名前/値を取得できますか?
それらをJSON.stringify()できるオブジェクトに変換して、データとしてajax呼び出しに渡すことができるようにしたいと考えています。
[編集]正しい方向を示してくれた他の人のおかげで、webmethodに一致するパラメーターとwebmethodに一致するクライアントスタブを動的に作成するソリューションがあります。これは、物事をより読みやすくするのに役立つと思います。
[編集2]さらに一歩進んだ。ここで、javascriptの関数名はwebmethodの名前と一致する必要があります。次に、webmethodが存在するページを最初のパラメーターとして関数に渡します。それは動的にクライアントのjavascript関数名を取ります、そしてそれはそれがwebmethodのために今探しているものです。
コードのどこかに作成する一般的なメソッドは次のとおりです。
function WebMethodCall(args) {
// in your stubs call this to get argname/value pairings in JSON form
var params = JSONArgs(args);
var fun = GetFunctionName(args);
// make a call to the webmethod via ajax using json
AjaxPostJSON(args[0] + "/" + fun, params, args);
}
function JSONArgs(args) {
var tmp = args.callee.toString().match(/\(.*?\)/)[0];
var argumentNames = tmp.replace(/[()\s]/g, '').split(',');
var param = new Object();
for (var i = 0; i < argumentNames.length; i++) {
param[argumentNames[i]] = args[i];
}
return JSON.stringify(param);
}
function GetFunctionName(args) {
var fName = args.callee.toString().match(/function ([^\(]+)/)[1]
return fName;
}
function AjaxPostJSON(url, data, args) {
var objGetData = new Object();
var fun = GetFunctionName(args);
var s = "On" + fun + "Success";
var f = "On" + fun + "Failure";
objGetData.url = url;
objGetData.type = "POST";
objGetData.data = data;
objGetData.contentType = "application/json; charset=utf-8";
objGetData.dataType = "json";
objGetData.success = window[s];
objGetData.error = window[f];
$.ajax(objGetData);
}
パラメータ名がwebmethodパラメータ名と一致する必要があるスタブ。関数名は、webmethod関数名とも一致する必要があります。ページは最初のパラメーターである必要がありますが、Webメソッドに含めるべきではないことに注意してください。ここでは、呼び出しを正しくするために使用されています。//関数スタブfunction GetData(page、id、name){WebMethodCall(arguments); }
「On」+func_name+「Success」/「Failure」の成功と失敗の名前パターンに注意してください。使用法:
function Button2_onclick() {
// call client side stub that matches the webmethod
GetData("Default.aspx", 8, "Bob");
}
// automatically registers these as success/error
function OnGetDataSuccess(data) {
alert(data.d);
}
function OnGetDataFailure(data) {
alert("failure");
}
これの良いところは、Webメソッドにパラメーターを変更/追加するときに、クライアントのjavascriptメソッドを取得し、Webメソッドに一致するようにパラメーター名を変更するのがとても簡単なことだと思います。