在函数内部,我可以得到它的参数名称/值吗?
我希望将它们变成一个我可以JSON.stringify()的对象,这样我就可以将它作为数据传递给ajax调用。
[编辑] 感谢其他人指出我正确的方向,我有一个解决方案,动态创建与web方法匹配的参数,以及与web方法匹配的客户端存根。我认为,这有助于使事情更具可读性。
[EDIT2] 更进一步。现在,javascript中的函数名称必须与webmethod的名称匹配,现在您将其作为webmethod所在页面的第一个参数传递给它。它动态地获取客户端javascript函数名称,这就是它现在为web方法所寻找的内容。
以下是您在代码中创建的常用方法:
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函数名称匹配。请注意,页面必须是第一个参数,但不应该在您的webmethod中。它只是用来使呼叫正确: //功能存根 function GetData(page,id,name){ WebMethodCall(参数); }
注意“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");
}
我认为,关于这一点的好处是,当我更改/添加参数到我的webmethod时,只需获取客户端javascript方法并更改参数名称以匹配webmethod即可,这就很容易了。
答案 0 :(得分:1)
您可以使用arguments
对象获取值。名称有点棘手,你必须解析函数的字符串表示。
我更喜欢直接将对象传递给函数:myFunction({name: value})
并将该对象直接传递给JSON.stringify
。
答案 1 :(得分:1)
如果我理解你,你想获得变量的“名称”作为“值”,如果是这样,不,你不能,变量名只是一个符号,可以帮助你作为一个程序员可以区分它们,但是你无法获得那些“元数据”信息,这就是为什么我们现在更喜欢使用json来提供一个更有意义的对象作为数据传输对象。
答案 2 :(得分:1)
这有帮助吗?:
function test (name, pass){
var params = (test.toString().substring(test.toString().indexOf('(')+ 1, test.toString().indexOf(')'))).replace(/ /g, '').split(',');
var obj = new Object();
var js = "";
for(var i=0;i<arguments.length;i++){
js += 'obj.'+ params[i]+' = "'+ arguments[i]+'";';
}
eval(js);
JSON.stringify(obj);
}
答案 3 :(得分:0)
是的,你可以...但这真的是一件简单的事情,谷歌会帮助
function myFunction(name,job) {
alert("Welcome " + name + ", the " + job);
}